„Здрасти, Амиго!“

„Здравей, Ели!“

„Днес искам да ви разкажа за класовете StringReader и StringWriter . По принцип няма да е много ново за вас, но понякога тези класове са много полезни. Но най-малкото искам да знаете че те съществуват."

"Тези класове са най-простите имплементации на абстрактните класове Reader и Writer. И те са основно подобни на FileReader и FileWriter. Въпреки това, за разлика от тях, те не работят с данни във файл на диск. Вместо това те работят с String в паметта на JVM."

"Защо ще имаме нужда от такива класове?"

„Понякога те са необходими. По същество StringReader е адаптер между класовете String и Reader . А StringWriter е String, който наследява 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 и след това го предадохме instead of обект Reader? И всичко ще бъде прочетено от него, Howто ни трябва?"

„Да. Хм. И има смисъл в това. Сега нека тестваме методите на StringWriter. За да направим това, ще направим примера по-сложен. Сега той няма просто да чете редовете и да ги показва на екрана, instead of това ще ги обърне и ще ги изведе към записващия обект. Например:"

Четене от обекта reader и писане в обекта writer:
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 ().“

„Хм. НяHow си всичко изглежда твърде лесно. Методът изпълнител работи с обектите на потока reader и writer , но ние работим с низове в основния метод.

— Наистина ли всичко е толкова просто?

"Да. За да конвертирате низ в Reader , просто напишете това:"

Създаване на четец от низ
String s = "data";
Reader reader = new StringReader(s);

„А преобразуването на StringWriter в String е още по-лесно:“

Получаване на низ от Writer
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

„Това са отлични курсове според мен. Благодаря, че ми разказа за тях, Ели.“