"Hai, Amigo!"

"Hai, Ellie!"

"Hari ini saya ingin memberitahu anda tentang kelas StringReader dan StringWriter . Pada dasarnya, tidak banyak yang akan menjadi baru kepada anda, tetapi kadangkala kelas ini sangat berguna. Tetapi, sekurang-kurangnya, saya mahu anda tahu bahawa mereka wujud."

"Kelas ini ialah pelaksanaan paling mudah bagi kelas Pembaca dan Penulis abstrak. Dan mereka pada asasnya serupa dengan FileReader dan FileWriter. Walau bagaimanapun, tidak seperti itu, ini tidak berfungsi dengan data dalam fail pada cakera. Sebaliknya, ia berfungsi dengan String dalam ingatan JVM."

"Kenapa kita perlukan kelas sebegitu?"

"Kadang-kadang mereka diperlukan. Pada asasnya, StringReader ialah penyesuai antara kelas String dan Reader . Dan StringWriter ialah String yang mewarisi Penulis . Ya... Saya boleh katakan itu bukan penjelasan terbaik. Adalah lebih baik untuk melihat pasangan contoh dahulu."

"Sebagai contoh, katakan anda ingin menguji kaedah anda, yang membaca data daripada objek Pembaca yang dihantar kepadanya. Kami boleh melakukannya seperti ini:"

Membaca daripada 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);
 }
}

"Dalam erti kata lain, kita hanya mengambil String, membungkusnya dalam StringReader, dan kemudian melepasinya dan bukannya objek Reader? Dan semuanya akan dibaca daripadanya seperti yang kita perlukan?"

"Ya. Hmm. Dan ada gunanya untuk ini. Sekarang mari kita uji kaedah StringWriter. Untuk melakukan ini, kita akan membuat contoh lebih rumit. Sekarang ia tidak akan hanya membaca garis dan memaparkannya pada skrin, sebaliknya ia akan membalikkannya dan mengeluarkannya kepada objek penulis. Contohnya:"

Membaca dari objek pembaca dan menulis kepada 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 mencipta objek StringWriter yang mengandungi rentetan yang menyimpan semua yang ditulis kepada penulis ini . Dan untuk mendapatkannya, anda hanya perlu memanggil kaedah toString ()."

"Hmm. Entah bagaimana semuanya kelihatan terlalu mudah. ​​Kaedah pelaksana berfungsi dengan objek aliran pembaca dan penulis , tetapi kami sedang bekerja dengan rentetan dalam kaedah utama.

"Adakah semuanya begitu mudah?"

"Ya. Untuk menukar Rentetan kepada Pembaca , tulis sahaja ini:"

Mencipta Pembaca daripada Rentetan
String s = "data";
Reader reader = new StringReader(s);

"Dan menukar StringWriter kepada String adalah lebih mudah:"

Mendapat Rentetan daripada Penulis
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

"Ini adalah kelas yang sangat baik, pada pendapat saya. Terima kasih kerana memberitahu saya tentang mereka, Ellie."