"Hei, Amigo! I dag skal du lære å gjøre noe nytt: erstatte System.out-objektet."
System.out er en statisk PrintStream- variabel kalt ut i System- klassen. Denne variabelen har den endelige modifikatoren, så du tilordner den ganske enkelt en ny verdi. System-klassen har imidlertid en spesiell metode for å gjøre dette: setOut(PrintStream-strøm) . Og det er det vi skal bruke.

"Interessant. Og hva skal vi erstatte det med?"

"Vi trenger et objekt som kan samle utdataene. ByteArrayOutputStream er best egnet for denne jobben. Dette er en spesiell klasse som er en dynamisk (kan endre størrelse) matrise og implementerer OutputStream-grensesnittet."

"En adapter mellom en array og OutputStream?"

"Noe sånt. Slik ser koden vår ut."

Kode
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 hva skal vi gjøre med denne linjen?"

"Vel, hva vi vil. For eksempel ville vi reversere det. Da vil koden se slik ut:"

Kode
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!");
}

"Så interessant! Nå begynner jeg å forstå litt av de flotte egenskapene disse små klassene gir."
"Takk for den interessante leksjonen, Bilaabo."