“สวัสดี อามีโก้!”

“สวัสดี เอลลี่!”

"วันนี้ฉันอยากจะบอกคุณเกี่ยวกับ คลาส StringReaderและStringWriterโดยหลักการแล้วจะไม่มีอะไรใหม่สำหรับคุณมากนัก แต่บางครั้งคลาสเหล่านี้ก็มีประโยชน์มาก แต่อย่างน้อยที่สุด ฉันต้องการให้คุณรู้ว่า ว่ามีอยู่จริง"

"คลาสเหล่านี้เป็นการใช้งานที่ง่ายที่สุดของคลาส Reader และ Writer ที่เป็นนามธรรม และโดยทั่วไปจะคล้ายกับ FileReader และ FileWriter อย่างไรก็ตาม คลาสเหล่านี้ไม่ทำงานกับข้อมูลในไฟล์บนดิสก์ ต่างจากคลาสเหล่านั้น แต่จะทำงานกับสตริง ในความทรงจำของ JVM"

"ทำไมเราถึงต้องการชั้นเรียนดังกล่าว"

"บางครั้งก็จำเป็น โดยพื้นฐานแล้วStringReaderเป็นอะแดปเตอร์ระหว่าง คลาส StringและReaderและStringWriterเป็นสตริงที่สืบทอดWriterใช่... ฉันสามารถบอกได้ว่านั่นไม่ใช่คำอธิบายที่ดีที่สุด จะเป็นการดีกว่าหากดูที่สองสามข้อ ของตัวอย่างก่อน"

"ตัวอย่างเช่น สมมติว่าคุณต้องการทดสอบเมธอดของคุณ ซึ่งอ่านข้อมูลจากออบเจกต์ Reader ที่ส่งไป เราสามารถทำได้ดังนี้:"

การอ่านจากวัตถุ Reader:
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);
 }
}

"กล่าวอีกนัยหนึ่งคือ เราเพียงแค่นำ String มาพันไว้ใน StringReader แล้วส่งต่อสิ่งนั้นแทน Reader วัตถุ? และทุกอย่างจะถูกอ่านจากมันอย่างที่เราต้องการหรือไม่"

"ใช่ อืม มีประเด็นนี้ ตอนนี้เรามาทดสอบวิธีการของ StringWriter ในการทำเช่นนี้ เราจะทำให้ตัวอย่างซับซ้อนขึ้น ตอนนี้จะไม่เพียงแค่อ่านบรรทัดและแสดงบนหน้าจอแทน มันจะย้อนกลับและส่งออกไปยังอ็อบเจกต์ตัวเขียน ตัวอย่างเช่น:"

การอ่านจากวัตถุตัวอ่านและการเขียนไปยังวัตถุตัวเขียน:
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);
 }
}

"เราสร้าง ออบเจกต์ StringWriterที่มีสตริงที่เก็บทุกอย่างที่เขียนถึงตัวเขียน นี้ และเพื่อให้ได้มา คุณต้องเรียกใช้ เมธอด toString ()"

"อืม ยังไงซะมันก็ดูง่ายเกินไป วิธีการดำเนินการนั้นทำงานร่วมกับออบเจกต์ สตรีมของ ผู้อ่านและผู้เขียนแต่เรากำลังทำงานกับสตริงในวิธีการหลัก

"มันง่ายขนาดนั้นเลยเหรอ?"

"อ๋อ หากต้องการแปลงสตริงเป็นReaderให้เขียนสิ่งนี้:"

การสร้าง Reader จากสตริง
String s = "data";
Reader reader = new StringReader(s);

"และการแปลง StringWriter เป็น String นั้นง่ายยิ่งกว่า:"

รับสตริงจากนักเขียน
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

"นี่เป็นชั้นเรียนที่ยอดเยี่ยมในความคิดของฉัน ขอบคุณที่บอกฉันเกี่ยวกับพวกเขา Ellie"