MemoryStreamの使い方のまとめ

オブジェクトの内容をXMLに書き出すのを調べているときに、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は、ファイルを使わず、データを書き出して、書き出した内容を文字列でゲットしたいという場合には、役に立つクラスなので、うまいこと使っていきたい。

コメント

このブログの人気の投稿

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