"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."
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:"
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."
GO TO FULL VERSION