– Szia Amigo!

– Szia, Ellie!

"Ma a StringReader és StringWriter osztályokról szeretnék mesélni . Elvileg nem sok újdonság lesz számodra, de néha nagyon hasznosak ezek az órák. De legalább szeretném, ha tudnád hogy léteznek."

"Ezek az osztályok az absztrakt Reader és Writer osztályok legegyszerűbb megvalósításai. És alapvetően hasonlóak a FileReaderhez és a FileWriterhez. Ezektől eltérően azonban ezek nem működnek a lemezen lévő fájlban lévő adatokkal. Ehelyett egy karakterlánccal dolgoznak. a JVM emlékezetében."

– Miért lenne szükségünk ilyen órákra?

"Néha szükség van rájuk. Lényegében a StringReader egy adapter a String és a Reader osztályok között. A StringWriter pedig egy String, amely örökli a Writert . Igen... Meg tudom mondani, ez nem a legjobb magyarázat. Jobb lesz megnézni egy párat. először a példák."

"Például tegyük fel, hogy tesztelni szeretné a metódusát, amely beolvassa a neki átadott Reader objektum adatait. Ezt a következőképpen tehetjük meg:"

Olvasás olvasó objektumból:
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);
 }
}

"Más szóval, egyszerűen vettünk egy Stringet, becsomagoltuk egy StringReaderbe, majd ezt adtuk át Reader objektum helyett? És minden ki lesz olvasva belőle, ahogy kell?"

"Igen. Hmm. És ennek van értelme. Most teszteljük a StringWriter módszereit. Ehhez bonyolultabbá tesszük a példát. Most már nem egyszerűen beolvassa a sorokat és megjeleníti a képernyőn, hanem megfordítja őket, és kiadja őket az író objektumnak. Például:"

Olvasás az olvasó objektumról és írás az író objektumra:
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);
 }
}

"Létrehoztunk egy StringWriter objektumot, amely tartalmaz egy karakterláncot, amely tárolja az írónak írt mindent . És ahhoz, hogy megkapja, csak meg kell hívnia a toString () metódust."

"Hmm. Valahogy túl egyszerűnek tűnik az egész. Az executor metódus működik az olvasó és író stream objektumokkal, de a fő metódusban karakterláncokkal dolgozunk.

– Tényleg ilyen egyszerű az egész?

"Igen. Egy karakterlánc olvasóvá konvertálásához írja be ezt:"

Olvasó létrehozása karakterláncból
String s = "data";
Reader reader = new StringReader(s);

"És a StringWriter átalakítása Stringgé még egyszerűbb:"

Húr beszerzése egy írótól
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

– Véleményem szerint ezek kiváló órák. Köszönöm, hogy meséltél róluk, Ellie.