« Salut Amigo ! »

« Salut, Élie ! »

"Aujourd'hui, je veux vous parler des classes StringReader et StringWriter . En principe, il n'y aura pas grand-chose de nouveau pour vous, mais parfois ces classes sont très utiles. Mais, à tout le moins, je veux que vous sachiez qu'ils existent."

"Ces classes sont les implémentations les plus simples des classes abstraites Reader et Writer. Et elles sont fondamentalement similaires à FileReader et FileWriter. Cependant, contrairement à celles-ci, elles ne fonctionnent pas avec des données dans un fichier sur disque. Au lieu de cela, elles fonctionnent avec une chaîne dans la mémoire de la JVM."

« Pourquoi aurions-nous besoin de telles classes ? »

"Parfois, ils sont nécessaires. Essentiellement, StringReader est un adaptateur entre les classes String et Reader . Et StringWriter est une chaîne qui hérite de Writer . Ouais... Je peux dire que ce n'est pas la meilleure explication. Il vaudra mieux regarder quelques d'exemples d'abord."

"Par exemple, supposons que vous souhaitiez tester votre méthode, qui lit les données de l'objet Reader qui lui sont transmises. Nous pourrions le faire comme ceci :"

Lecture à partir d'un objet 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);
 }
}

"En d'autres termes, nous avons simplement pris une chaîne, l'avons enveloppée dans un StringReader, puis l'avons transmise à la place d'un objet Reader ? Et tout sera lu à partir de celui-ci comme nous en avons besoin?"

"Ouais. Hmm. Et il y a un point à cela. Testons maintenant les méthodes de StringWriter. Pour ce faire, nous allons rendre l'exemple plus compliqué. Maintenant, il ne se contentera pas de lire les lignes et de les afficher à l'écran, à la place il les inversera et les affichera dans l'objet écrivain. Par exemple :"

Lecture à partir de l'objet lecteur et écriture dans l'objet écrivain :
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);
 }
}

"Nous avons créé un objet StringWriter qui contient une chaîne qui stocke tout ce qui est écrit sur cet écrivain . Et pour l'obtenir, il vous suffit d'appeler la méthode toString ()."

"Hmm. D'une certaine manière, tout cela semble trop facile. La méthode de l'exécuteur fonctionne avec les objets de flux de lecture et d'écriture , mais nous travaillons avec des chaînes dans la méthode principale.

« Est-ce vraiment si simple ? »

"Oui. Pour convertir un String en Reader , écrivez simplement ceci :"

Création d'un lecteur à partir d'une chaîne
String s = "data";
Reader reader = new StringReader(s);

"Et convertir un StringWriter en String est encore plus simple :"

Obtenir une chaîne d'un écrivain
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

"Ce sont d'excellents cours, à mon avis. Merci de m'en avoir parlé, Ellie."