"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:"
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:"
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:"
String s = "data";
Reader reader = new StringReader(s);
"Og å konvertere en StringWriter til en String er enda enklere:"
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."
GO TO FULL VERSION