"Chào, Amigo!"

"Chào, Ellie!"

"Hôm nay tôi muốn nói với bạn về các lớp StringReaderStringWriter . Về nguyên tắc, sẽ không có nhiều điều mới mẻ đối với bạn, nhưng đôi khi những lớp này rất hữu ích. Nhưng, ít nhất, tôi muốn bạn biết rằng chúng tồn tại."

"Các lớp này là cách triển khai đơn giản nhất của các lớp Trình đọc và Trình ghi trừu tượng. Và về cơ bản chúng tương tự như FileReader và FileWriter. Tuy nhiên, không giống như những lớp đó, chúng không hoạt động với dữ liệu trong tệp trên đĩa. Thay vào đó, chúng hoạt động với Chuỗi trong bộ nhớ của JVM."

"Tại sao chúng ta cần những lớp học như vậy?"

"Đôi khi chúng cần thiết. Về cơ bản, StringReader là bộ điều hợp giữa các lớp StringReader . Và StringWriter là một String kế thừa Writer . Vâng... Tôi có thể nói đó không phải là lời giải thích tốt nhất. Sẽ tốt hơn nếu xem xét một cặp ví dụ đầu tiên."

"Ví dụ: giả sử bạn muốn kiểm tra phương thức đọc dữ liệu từ đối tượng Reader được truyền cho nó. Chúng ta có thể thực hiện như sau:"

Đọc từ một đối tượng 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);
 }
}

"Nói cách khác, chúng tôi chỉ cần lấy một Chuỗi, gói nó trong một StringReader, sau đó chuyển nó thay vì một đối tượng Reader? Và mọi thứ sẽ được đọc từ nó như chúng tôi cần?"

"Yep. Hmm. Và có một điểm cho điều này. Bây giờ hãy kiểm tra các phương thức của StringWriter. Để làm điều này, chúng ta sẽ làm cho ví dụ phức tạp hơn. Bây giờ, nó sẽ không chỉ đọc các dòng và hiển thị chúng trên màn hình, thay vào đó nó sẽ đảo ngược chúng và xuất chúng ra đối tượng nhà văn. Ví dụ:"

Đọc từ đối tượng người đọc và ghi vào đối tượng nhà văn:
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);
 }
}

"Chúng tôi đã tạo một đối tượng StringWriter chứa một chuỗi lưu trữ mọi thứ được viết cho người viết này . Và để lấy nó, bạn chỉ cần gọi phương thức toString ()."

"Hmm. Bằng cách nào đó, tất cả dường như quá dễ dàng. Phương thức thực thi hoạt động với các đối tượng luồng trình đọcghi , nhưng chúng tôi đang làm việc với các chuỗi trong phương thức chính.

"Mọi chuyện thực sự đơn giản như vậy sao?"

"Yep. Để chuyển đổi String thành Reader , chỉ cần viết:"

Tạo Trình đọc từ Chuỗi
String s = "data";
Reader reader = new StringReader(s);

"Và việc chuyển đổi StringWriter thành String thậm chí còn dễ dàng hơn:"

Lấy một chuỗi từ một nhà văn
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

"Đây là những lớp học xuất sắc, theo ý kiến ​​của tôi. Cảm ơn vì đã kể cho tôi nghe về chúng, Ellie."