StringReaderクラスとStringWriterクラスは、文字列を一種のストリームとみなして読み込み・書き込みを行うクラスです。 これらのクラスの一番のポイントは、TextReader/TextWriterの派生クラスである点です。 StreamReaderクラスとStreamWriterクラスもTextReader/TextWriterから派生したクラスですが、これらのクラスと共通したメソッドを持つため、文字列のストリームであろうとファイルのストリームであろうと区別することなく同じ処理を行うことが出来ます。
また、StringReader/StringWriterを使うことによって、一時ファイルを使わずにメモリ上のでテキストの読み込み/書き込みを行うといったことも可能になります。
以下ではStringReader/StringWriterに固有な部分のみを解説します。 個々のメソッドの使い方など、基本的な操作についてはStreamReaderクラス・StreamWriterクラスを参照してください。
StringReaderクラス
StringReaderクラスはStringクラスの文字列をストリームとみなして読み込みを行うクラスです。 コンストラクタに読み込みたい文字列を含むStringを指定することで、その文字列から読み込みを行うStringReaderのインスタンスを生成できます。
以下は、StringReaderとStreamReaderを使って、文字列およびファイルをXMLとして読み込み、要素"/foo/bar"のテキストを表示する例です。 XMLの読み込みは共通のメソッドである点に注目してください。
StringReaderを使うことにより、StreamReaderのメソッドを使ってファイルから読み込むのと同様に文字列を扱うことができます。 次の例では、既存の文字列を読み込み、一行毎に分割して表示しています。
StringWriterクラス
StringWriterクラスはStringBuilderクラスを出力先のストリームとみなして書き込みを行うクラスです。 Stringクラスは不変であるため、代わりにStringBuilderが書き込み先に使用されます。 コンストラクタに書き込み先となるStringBuilderを指定することで、そのStringBuilderへ書き込みを行うStringWriterのインスタンスを生成できます。
以下は、StringWriterとStreamWriterを使って、作成したXMLドキュメントをファイルと文字列に書き出す例です。 XMLドキュメントの作成と書き込みは共通のメソッドである点に注目してください。
StringWriterでは、コンストラクタにStringBuilderを指定しなくてもインスタンスを生成することが出来ます。 この場合、暗黙的にStringBuilderが生成されStringWriterで使用されます。 書き込んだ内容は、GetStringBuilderメソッドやToStringメソッドを使って取得できます。