前に説明したように、BinaryReader または BinaryWriter が閉じられると、その基になる Stream も閉じられます (aargh)。この状況を考えてみましょう: ルーチンR
に MemoryStream が渡されますM
。いくつかのものを書き込んでからM
、それを別のルーチンに渡してさらに処理したいと思います(必ずしも書き込みではありません)。便宜上、M
BinaryWriter でラップして書き込みを行いたいと思います。書いた後、BinaryWriter は完了しましたが、M
.
void R(MemoryStream M)
{
using (B = new BinaryWriter(M))
{
// write some stuff using B
}
S(M); // now pass M to another routine for further processing
}
しかし、BinaryStream を閉じずに破棄することはできませんM
。
Q: 次のいずれかを行う方法はありますか?
- 基になる byte[] を MemoryStream から抽出し、
- ストリームのクローン
- 閉じたストリームを再び開く