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