"Halo, Amigo! Hari ini Anda akan belajar bagaimana melakukan sesuatu yang baru: mengganti objek System.out."
System.out adalah variabel PrintStream statis yang dipanggil di kelas System . Variabel ini memiliki pengubah final , jadi Anda cukup menetapkannya sebagai nilai baru. Namun, kelas Sistem memiliki metode khusus untuk melakukan ini: setOut(PrintStream stream) . Dan itulah yang akan kita gunakan.

"Menarik. Dan dengan apa kita akan menggantinya?"

"Kami memerlukan beberapa objek yang dapat mengumpulkan data keluaran. ByteArrayOutputStream paling cocok untuk pekerjaan ini. Ini adalah kelas khusus yang merupakan larik dinamis (dapat diubah ukurannya) dan mengimplementasikan antarmuka OutputStream."

"Adaptor antara array dan OutputStream?"

"Sesuatu seperti itu. Seperti inilah kode kita."

Kode
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 baris ini?"

"Baiklah, apapun yang kita inginkan. Misalnya, kita akan membalikkannya. Maka kodenya akan terlihat seperti ini:"

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

"Menarik sekali! Sekarang saya mulai memahami sedikit kemampuan hebat yang disediakan oleh kelas-kelas kecil ini."
"Terima kasih atas pelajaran yang menarik, Bilaabo."