"Здравей, Амиго! Днес ще научиш How да направиш нещо ново: да замениш обекта System.out."
System.out е статична променлива PrintStream , извикана в класа System . Тази променлива има крайния модификатор, така че просто й присвоявате нова стойност. Класът System обаче има специален метод за това: setOut(PrintStream stream) . И това ще използваме.
"Интересно. И с Howво ще го заменим?"
"Нуждаем се от няHowъв обект, който може да събира изходните данни. ByteArrayOutputStream е най-подходящ за тази задача. Това е специален клас, който е динамичен (с възможност за промяна на размера) масив и имплементира интерфейса OutputStream."
„Адаптер между масив и OutputStream?“
"Нещо подобно. Ето How изглежда нашият code."
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!");
}
— И Howво ще правим с тази линия?
„Е, Howвото искаме. Например, бихме го обърнали. Тогава codeът ще изглежда така:“
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!");
}
„Колко интересно! Сега започвам да разбирам малко от страхотните възможности, които предоставят тези малки класове.“
— Благодаря ти за интересния урок, Билаабо.
GO TO FULL VERSION