MemoryStreamの使い方のまとめ
オブジェクトの内容をXMLに書き出すのを調べているときに、MemoryStreamの使い方もしらべたので、まとめておく。
MemoryStreamに文字列を書き出し、巻き戻して、読み直す手順をしらべてみる。
一般のストリームと同じように使うのであれば、StreamWriterを使って書き出し、ストリームを最初まで読み戻し、StreamReaderを使って読むという手順になる。
注意する点としては、書き出しのときに、バッファに残っている文字列が出力されていないことがあるので、Flashメソッドを呼ぶこと。
メソッドに書くとこうなる。
MemoryStreamの場合は、ストリームの内容をゲットできるToArrayメソッドがあるので、これを使えば、ストリームの内容を文字列としてゲットできる。
さらに、MemoryStreamの場合は、ストリームの内容を設定するコンストラクターがあるので、これを使えば指定した文字列を内容とするストリームを作ることができる。
MemoryStreamは、ファイルを使わず、データを書き出して、書き出した内容を文字列でゲットしたいという場合には、役に立つクラスなので、うまいこと使っていきたい。
MemoryStreamに文字列を書き出し、巻き戻して、読み直す手順をしらべてみる。
一般のストリームと同じように使うのであれば、StreamWriterを使って書き出し、ストリームを最初まで読み戻し、StreamReaderを使って読むという手順になる。
注意する点としては、書き出しのときに、バッファに残っている文字列が出力されていないことがあるので、Flashメソッドを呼ぶこと。
メソッドに書くとこうなる。
- public void doTest1()
- {
- var st = new MemoryStream();
- //var st = new FileStream("test.txt", FileMode.OpenOrCreate);
- var wt = new StreamWriter(st);
- wt.Write("abc");
- wt.Flush();
- st.Seek(0, SeekOrigin.Begin);
- var rd = new StreamReader(st);
- var s = rd.ReadToEnd();
- Debug.Assert(s == "abc", "NG");
- }
MemoryStreamの場合は、ストリームの内容をゲットできるToArrayメソッドがあるので、これを使えば、ストリームの内容を文字列としてゲットできる。
- public void doTest2()
- {
- var st = new MemoryStream();
- //var st = new FileStream("test.txt", FileMode.OpenOrCreate);
- var wt = new StreamWriter(st);
- wt.Write("abc");
- wt.Flush();
- var s = Encoding.UTF8.GetString(st.ToArray());
- Debug.Assert(s == "abc", "NG");
- }
さらに、MemoryStreamの場合は、ストリームの内容を設定するコンストラクターがあるので、これを使えば指定した文字列を内容とするストリームを作ることができる。
- public void doTest3()
- {
- var st = new MemoryStream(Encoding.UTF8.GetBytes("abc"));
- var s = Encoding.UTF8.GetString(st.ToArray());
- Debug.Assert(s == "abc", "NG");
- }
MemoryStreamは、ファイルを使わず、データを書き出して、書き出した内容を文字列でゲットしたいという場合には、役に立つクラスなので、うまいこと使っていきたい。
コメント
コメントを投稿