"Hei, Amigo!"

"Hei, Ellie!"

"I dag vil jeg fortelle deg om StringReader- og StringWriter- klassene. I prinsippet vil det ikke være mye som vil være nytt for deg, men noen ganger er disse klassene veldig nyttige. Men i det minste vil jeg at du skal vite at de eksisterer."

"Disse klassene er de enkleste implementeringene av de abstrakte Reader- og Writer-klassene. Og de ligner i bunn og grunn på FileReader og FileWriter. Men i motsetning til disse fungerer disse ikke med data i en fil på disk. I stedet fungerer de med en streng i JVMs minne."

"Hvorfor skulle vi trenge slike klasser?"

"Noen ganger trengs de. StringReader er i hovedsak en adapter mellom String- og Reader- klassene. Og StringWriter er en streng som arver Writer . Ja... jeg kan se at det ikke er den beste forklaringen. Det vil være bedre å se på et par eksempler først."

"Anta for eksempel at du vil teste metoden din, som leser data fra Reader-objektet som er sendt til det. Vi kan gjøre det slik:"

Lese fra et Reader-objekt:
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);
 }
}

"Med andre ord, vi tok ganske enkelt en streng, pakket den inn i en StringReader og passerte den i stedet for et Reader-objekt? Og alt vil bli lest fra den slik vi trenger?"

"Jepp. Hmm. Og det er et poeng med dette. La oss nå teste metodene til StringWriter. For å gjøre dette vil vi gjøre eksemplet mer komplisert. Nå vil det ikke bare lese linjene og vise dem på skjermen, i stedet den vil reversere dem og sende dem til writer-objektet. For eksempel:"

Lese fra leserobjektet og skrive til forfatterobjektet:
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);
 }
}

"Vi opprettet et StringWriter- objekt som inneholder en streng som lagrer alt som er skrevet til denne forfatteren . Og for å få det, trenger du bare å kalle toString ()-metoden."

"Hmm. På en eller annen måte virker det hele for enkelt. Eksekveringsmetoden fungerer med leser- og skribentstrømobjekter , men vi jobber med strenger i hovedmetoden.

"Er det hele så enkelt?"

"Jepp. For å konvertere en streng til en leser , bare skriv dette:"

Opprette en leser fra en streng
String s = "data";
Reader reader = new StringReader(s);

"Og å konvertere en StringWriter til en String er enda enklere:"

Få en streng fra en forfatter
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

"Dette er utmerkede klasser, etter min mening. Takk for at du fortalte meg om dem, Ellie."