"Helo, Amigo! Hari ini anda akan belajar cara melakukan sesuatu yang baharu: gantikan objek System.out."
System.out ialah pembolehubah PrintStream statik yang dipanggil dalam kelas Sistem . Pembolehubah ini mempunyai pengubah suai akhir , jadi anda hanya menetapkan nilai baharu. Walau bagaimanapun, kelas Sistem mempunyai kaedah khas untuk melakukan ini: setOut(PrintStream stream) . Dan itulah yang akan kami gunakan.

"Menarik. Dan kita akan menggantikannya dengan apa?"

"Kami memerlukan beberapa objek yang boleh mengumpul data output. ByteArrayOutputStream paling sesuai untuk tugas ini. Ini ialah kelas khas yang merupakan tatasusunan dinamik (boleh diubah saiz) dan melaksanakan antara muka OutputStream."

"Penyesuai antara tatasusunan dan OutputStream?"

"Sesuatu seperti itu. Inilah rupa kod kami."

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

"Dan apa yang akan kita lakukan dengan talian ini?"

"Nah, apa sahaja yang kita mahu. Contohnya, kita akan membalikkannya. Kemudian kod itu akan kelihatan seperti ini:"

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

"Sungguh menarik! Sekarang saya mula memahami sedikit sebanyak keupayaan hebat yang diberikan oleh kelas kecil ini."
"Terima kasih atas pelajaran yang menarik, Bilaabo."