MemoryStreamの使い方のまとめ

オブジェクトの内容をXMLに書き出すのを調べているときに、MemoryStreamの使い方もしらべたので、まとめておく。



MemoryStreamに文字列を書き出し、巻き戻して、読み直す手順をしらべてみる。

一般のストリームと同じように使うのであれば、StreamWriterを使って書き出し、ストリームを最初まで読み戻し、StreamReaderを使って読むという手順になる。
注意する点としては、書き出しのときに、バッファに残っている文字列が出力されていないことがあるので、Flashメソッドを呼ぶこと。

メソッドに書くとこうなる。

  1.         public void doTest1()
  2.         {
  3.             var st = new MemoryStream();
  4.             //var st = new FileStream("test.txt", FileMode.OpenOrCreate);
  5.  
  6.             var wt = new StreamWriter(st);
  7.             wt.Write("abc");
  8.             wt.Flush();
  9.  
  10.             st.Seek(0, SeekOrigin.Begin);
  11.             var rd = new StreamReader(st);
  12.             var s = rd.ReadToEnd();        
  13.  
  14.             Debug.Assert(s == "abc", "NG");
  15.         }

MemoryStreamの場合は、ストリームの内容をゲットできるToArrayメソッドがあるので、これを使えば、ストリームの内容を文字列としてゲットできる。

  1. public void doTest2()
  2. {
  3. var st = new MemoryStream();
  4. //var st = new FileStream("test.txt", FileMode.OpenOrCreate);
  5.  
  6. var wt = new StreamWriter(st);
  7. wt.Write("abc");
  8. wt.Flush();
  9.  
  10. var s = Encoding.UTF8.GetString(st.ToArray());
  11.  
  12. Debug.Assert(s == "abc", "NG");
  13. }

さらに、MemoryStreamの場合は、ストリームの内容を設定するコンストラクターがあるので、これを使えば指定した文字列を内容とするストリームを作ることができる。

  1.         public void doTest3()
  2.         {
  3.             var st = new MemoryStream(Encoding.UTF8.GetBytes("abc"));
  4.  
  5.             var s = Encoding.UTF8.GetString(st.ToArray());
  6.  
  7.             Debug.Assert(s == "abc", "NG");
  8.         }

MemoryStreamは、ファイルを使わず、データを書き出して、書き出した内容を文字列でゲットしたいという場合には、役に立つクラスなので、うまいこと使っていきたい。

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。