"Hej, Amigo! I dag skal du lære at gøre noget nyt: udskifte System.out-objektet."
System.out er en statisk PrintStream- variabel kaldet ud i System- klassen. Denne variabel har den endelige modifikator, så du tildeler den blot en ny værdi. Systemklassen har dog en speciel metode til at gøre dette: setOut(PrintStream stream) . Og det er det, vi vil bruge.
"Interessant. Og hvad skal vi erstatte det med?"
"Vi har brug for et objekt, der kan indsamle outputdata. ByteArrayOutputStream er bedst egnet til dette job. Dette er en speciel klasse, der er en dynamisk (tilpasningsbar) matrix og implementerer OutputStream-grænsefladen."
"En adapter mellem et array og OutputStream?"
"Sådan noget. Sådan ser vores kode ud."
public static void main(String[] args) throws Exception
{
//Save the current PrintStream in a special variable
PrintStream consoleStream = System.out;
//Create a dynamic array
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//Create an adapter for the PrintStream class
PrintStream stream = new PrintStream(outputStream);
//Set it as the current System.out
System.setOut(stream);
//Call a function that knows nothing about our changes
printSomething();
//Convert the data written to our ByteArray into a string
String result = outputStream.toString();
//Put everything back to the way it was
System.setOut(consoleStream);
}
public static void printSomething()
{
System.out.println("Hi");
System.out.println("My name is Amigo");
System.out.println("Bye-bye!");
}
"Og hvad skal vi med denne linje?"
"Nå, hvad end vi vil. For eksempel ville vi vende det. Så ville koden se sådan ud:"
public static void main(String[] args) throws Exception
{
//Save the current PrintStream in a special variable
PrintStream consoleStream = System.out;
//Create a dynamic array
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//Create an adapter for the PrintStream class
PrintStream stream = new PrintStream(outputStream);
//Set it as the current System.out
System.setOut(stream);
//Call a function that knows nothing about our changes
printSomething();
//Convert the data written to our ByteArray into a string
String result = outputStream.toString();
//Put everything back to the way it was
System.setOut(consoleStream);
//Reverse the string
StringBuilder stringBuilder = new StringBuilder(result);
stringBuilder.reverse();
String reverseString = stringBuilder.toString();
//Output it to the console
System.out.println(reverseString);
}
public static void printSomething()
{
System.out.println("Hi");
System.out.println("My name is Amigo");
System.out.println("Bye-bye!");
}
"Hvor interessant! Nu begynder jeg at forstå lidt af de store muligheder, disse små klasser giver."
"Tak for den interessante lektion, Bilaabo."
GO TO FULL VERSION