"Bună, Amigo! Astăzi vei învăța cum să faci ceva nou: înlocuiește obiectul System.out."
System.out este o variabilă statică PrintStream numită în clasa System . Această variabilă are modificatorul final , așa că pur și simplu îi atribui o nouă valoare. Cu toate acestea, clasa System are o metodă specială pentru a face acest lucru: setOut(PrintStream stream) . Și asta vom folosi.
"Interesant. Și cu ce îl vom înlocui?"
„Avem nevoie de un obiect care poate colecta datele de ieșire. ByteArrayOutputStream este cel mai potrivit pentru acest job. Aceasta este o clasă specială care este o matrice dinamică (redimensionabilă) și implementează interfața OutputStream.”
„Un adaptor între o matrice și OutputStream?”
"Ceva de genul asta. Iată cum arată codul nostru."
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!");
}
— Și ce vom face cu această linie?
"Ei bine, orice ne-am dori. De exemplu, l-am inversa. Atunci codul ar arăta astfel:"
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!");
}
"Ce interesant! Acum încep să înțeleg un pic din capacitățile grozave pe care le oferă aceste clase mici."
— Mulțumesc pentru lecția interesantă, Bilaabo.
GO TO FULL VERSION