「こんにちは、アミーゴ!」
「こんにちは、エリー!」
「今日はStringReaderクラスとStringWriterクラスについて説明したいと思います。原則として、あなたにとって新しいことはそれほど多くありませんが、これらのクラスが非常に役立つ場合があります。しかし、少なくとも知っておいてほしいのです。」彼らが存在することを。」
「これらのクラスは、抽象 Reader クラスと Writer クラスの最も単純な実装です。そして、基本的に FileReader と FileWriter に似ています。ただし、これらとは異なり、ディスク上のファイル内のデータを操作しません。代わりに、文字列を操作します。 JVM のメモリ内にあります。」
「なぜそのようなクラスが必要なのでしょうか?」
「場合によっては、それらが必要になることがあります。本質的に、StringReader はString クラスとReaderクラスの間のアダプターです。そしてStringWriter はWriterを継承する String です。そうです...それが最良の説明ではないことはわかります。いくつか見てみるとよいでしょう。」まずは例から。」
「たとえば、渡された 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 = new StringWriter();
/* Here we write a bunch of data to the writer */
String result = writer.toString();
「これらは素晴らしい授業だと思います。教えてくれてありがとう、エリー。」
GO TO FULL VERSION