"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."
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:"
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."
GO TO FULL VERSION