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は、ファイルを使わず、データを書き出して、書き出した内容を文字列でゲットしたいという場合には、役に立つクラスなので、うまいこと使っていきたい。
コメント
コメントを投稿