"Bună, Amigo!"

— Bună, Ellie!

„Astăzi vreau să vă povestesc despre clasele StringReader și StringWriter . În principiu, nu vor fi multe lucruri noi pentru voi, dar uneori aceste clase sunt foarte utile. Dar, cel puțin, vreau să știți că ele există”.

„Aceste clase sunt cele mai simple implementări ale claselor abstracte Reader și Writer. Și sunt, practic, similare cu FileReader și FileWriter. Cu toate acestea, spre deosebire de acestea, acestea nu funcționează cu date dintr-un fișier de pe disc. În schimb, funcționează cu un String. în memoria JVM”.

„De ce am avea nevoie de asemenea cursuri?”

„Uneori sunt necesare. În esență, StringReader este un adaptor între clasele String și Reader . Și StringWriter este un String care moștenește Writer . Da... Îmi dau seama că nu este cea mai bună explicație. Va fi mai bine să ne uităm la câteva mai întâi de exemple.”

„De exemplu, să presupunem că doriți să testați metoda dvs., care citește datele din obiectul Reader care i-a fost transmis. Am putea face acest lucru:”

Citirea dintr-un obiect 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);
 }
}

"Cu alte cuvinte, pur și simplu am luat un String, l-am înfășurat într-un StringReader și apoi l-am trecut în loc de un obiect Reader? Și totul va fi citit din el așa cum avem nevoie?"

„Da. Hmm. Și asta are un rost. Acum să testăm metodele StringWriter. Pentru a face acest lucru, vom face exemplul mai complicat. Acum nu va citi pur și simplu liniile și le va afișa pe ecran, ci în schimb. le va inversa și le va scoate la obiectul writer. De exemplu:"

Citirea de la obiectul cititor și scrierea în obiectul 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);
 }
}

„Am creat un obiect StringWriter care conține un șir care stochează tot ce este scris în acest scriitor . Și pentru a-l obține, trebuie doar să apelați metoda toString ()”.

„Hmm. Cumva, totul pare prea ușor. Metoda executor funcționează cu obiectele de flux cititor și scriitor , dar lucrăm cu șiruri în metoda principală.

„Este chiar atât de simplu?”

„Da. Pentru a converti un șir de caractere într-un cititor , trebuie doar să scrieți asta:”

Crearea unui cititor dintr-un șir
String s = "data";
Reader reader = new StringReader(s);

„Și convertirea unui StringWriter într-un String este și mai ușoară:”

Obținerea unui șir de la un scriitor
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

— Acestea sunt cursuri excelente, după părerea mea. Mulțumesc că mi-ai spus despre ele, Ellie.