"Hai, Amigo!"

"Hai, Elli!"

"Hari ini saya ingin memberi tahu Anda tentang kelas StringReader dan StringWriter . Pada prinsipnya, tidak banyak yang baru bagi Anda, tetapi terkadang kelas ini sangat berguna. Tapi, paling tidak, saya ingin Anda tahu bahwa mereka ada."

"Kelas-kelas ini adalah implementasi paling sederhana dari kelas Pembaca dan Penulis abstrak. Dan mereka pada dasarnya mirip dengan FileReader dan FileWriter. Namun, tidak seperti itu, ini tidak bekerja dengan data dalam file di disk. Sebaliknya, mereka bekerja dengan sebuah String dalam memori JVM."

"Mengapa kita membutuhkan kelas seperti itu?"

"Kadang-kadang mereka dibutuhkan. Intinya, StringReader adalah adaptor antara kelas String dan Reader . Dan StringWriter adalah String yang mewarisi Writer . Ya... Saya tahu itu bukan penjelasan terbaik. Akan lebih baik untuk melihat pasangan contoh dulu."

"Misalnya, misalkan Anda ingin menguji metode Anda, yang membaca data dari objek Pembaca yang diteruskan ke sana. Kita dapat melakukannya seperti ini:"

Membaca dari objek Pembaca:
public static void main (String[] args) throws Exception
{
 String test = "Hi!\n My name is Richard\n I'm a photographer\n";

 // This line is key: we "convert" the String into a Reader.
 StringReader reader = new StringReader(test);

 executor(reader);
}

public static void executor(Reader reader) throws Exception
{
 BufferedReader br = new BufferedReader(reader);
 String line;
 while (line = br.readLine() != null)
 {
 System.out.println(line);
 }
}

"Dengan kata lain, kita hanya mengambil sebuah String, membungkusnya dalam sebuah StringReader, dan kemudian meneruskannya sebagai pengganti objek Reader? Dan semuanya akan dibaca darinya seperti yang kita butuhkan?"

"Yep. Hmm. Dan ada benarnya juga. Sekarang mari kita uji metode StringWriter. Untuk melakukan ini, kita akan membuat contoh lebih rumit. Sekarang tidak hanya membaca baris dan menampilkannya di layar, melainkan itu akan membalikkannya dan menampilkannya ke objek penulis. Misalnya:"

Membaca dari objek pembaca dan menulis ke objek penulis:
public static void main (String[] args) throws Exception
{
 // The Reader must read this String.
 String test = "Hi!\n My name is Richard\n I'm a photographer\n";

 // Wrap the String in a StringReader.
 StringReader reader = new StringReader(test);

 // Create a StringWriter object.
 StringWriter writer = new StringWriter();

 // Copy strings from the Reader to the Writer, after first reversing them.
 executor(reader, writer);

 // Get the text that was written to the Writer.
 String result = writer.toString();

 // Display the text from the Writer on the screen.
 System.out.println("Result: "+ result);
}

public static void executor(Reader reader, Writer writer) throws Exception
{
 BufferedReader br = new BufferedReader(reader);
String line;

 // Read a string from the Reader.
while (line = br.readLine()) != null)
 {

 // Reverse the string.
  StringBuilder sb = new StringBuilder(line);
  String newLine = sb.reverse().toString();

 // Write the string to the Writer.
  writer.write(newLine);
 }
}

"Kami membuat objek StringWriter yang berisi string yang menyimpan semua yang ditulis untuk penulis ini . Dan untuk mendapatkannya, Anda hanya perlu memanggil metode toString ()."

"Hmm. Entah bagaimana semuanya tampak terlalu mudah. ​​Metode eksekutor bekerja dengan objek aliran pembaca dan penulis , tetapi kami bekerja dengan string dalam metode utama.

"Apakah semuanya sesederhana itu?"

"Ya. Untuk mengonversi sebuah String menjadi Reader , tulis saja ini:"

Membuat Pembaca dari String
String s = "data";
Reader reader = new StringReader(s);

"Dan mengonversi StringWriter menjadi String bahkan lebih mudah:"

Mendapatkan String dari Writer
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

"Ini adalah kelas-kelas yang luar biasa, menurutku. Terima kasih telah memberitahuku tentangnya, Ellie."