"Hej, Amigo! Idag ska du lära dig att göra något nytt: byt ut System.out-objektet."
System.out är en statisk PrintStream -variabel som kallas ut i klassen System . Denna variabel har den sista modifieraren, så du tilldelar den helt enkelt ett nytt värde. Systemklassen har dock en speciell metod för att göra detta: setOut(PrintStream stream) . Och det är vad vi kommer att använda.
"Intressant. Och vad ska vi ersätta det med?"
"Vi behöver något objekt som kan samla in utdata. ByteArrayOutputStream är bäst lämpad för det här jobbet. Det här är en specialklass som är en dynamisk (storleksändringsbar) array och implementerar OutputStream-gränssnittet."
"En adapter mellan en array och OutputStream?"
"Något sådant. Så här ser vår kod 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!");
}
"Och vad ska vi göra med den här linjen?"
"Tja, vad vi vill. Till exempel skulle vi vända det. Då skulle koden se ut så här:"
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!");
}
"Vad intressant! Nu börjar jag förstå lite av de fantastiska möjligheter som dessa små klasser ger."
"Tack för den intressanta lektionen, Bilaabo."
GO TO FULL VERSION