「こんにちは、アミーゴ!」

「こんにちは、エリー!」

「今日はStringReaderクラスとStringWriterクラスについて説明したいと思います。原則として、あなたにとって新しいことはそれほど多くありませんが、これらのクラスが非常に役立つ場合があります。しかし、少なくとも知っておいてほしいのです。」彼らが存在することを。」

「これらのクラスは、抽象 Reader クラスと Writer クラスの最も単純な実装です。そして、基本的に FileReader と FileWriter に似ています。ただし、これらとは異なり、ディスク上のファイル内のデータを操作しません。代わりに、文字列を操作します。 JVM のメモリ内にあります。」

「なぜそのようなクラスが必要なのでしょうか?」

「場合によっては、それらが必要になることがあります。本質的に、StringReader はString クラスReaderクラスの間のアダプターです。そしてStringWriter はWriterを継承する String です。そうです...それが最良の説明ではないことはわかります。いくつか見てみるとよいでしょう。」まずは例から。」

「たとえば、渡された Reader オブジェクトからデータを読み取るメソッドをテストしたいとします。次のように実行できます。」

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);
 }
}

「言い換えれば、単純に String を取得し、それを StringReader でラップし、Reader オブジェクトの代わりにそれを渡しただけでしょうか? それで、必要に応じてそこからすべてが読み取られるのですか?」

「はい。うーん。これには一理あります。次に、StringWriter のメソッドをテストしましょう。これを行うには、例をより複雑にします。今度は、単純に行を読み取って画面に表示するだけではなく、それらを反転して、ライター オブジェクトに出力します。例:"

リーダー オブジェクトからの読み取りとライター オブジェクトへの書き込み:
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);
 }
}

「このライターに書き込まれたすべてを格納する文字列を含むStringWriterオブジェクトを作成しました。それを取得するには、 toString () メソッドを呼び出すだけです。」

「うーん。なんだかすべてが簡単すぎるように思えます。executor メソッドはリーダーライターのストリーム オブジェクトを操作しますが、メイン メソッドでは文字列を操作しています。

「本当にすべてはそんなに簡単なことなのでしょうか?」

「はい。 String をReaderに変換するには、次のように書くだけです。」

文字列からリーダーを作成する
String s = "data";
Reader reader = new StringReader(s);

「そして、StringWriter を String に変換するのはさらに簡単です。」

Writerから文字列を取得する
Writer writer = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();

「これらは素晴らしい授業だと思います。教えてくれてありがとう、エリー。」