无法使用BinaryWriter写入MemoryStream

时间:2012-01-29 23:36:22

标签: c# stream

我试过这段代码:

byte[] someData = new byte[] { 1, 2, 3, 4 };
MemoryStream stream = new MemoryStream(someData, 1, someData.Length - 1, true);
using (BinaryWriter writer = new BinaryWriter(stream))
{
    writer.Write(1);
}
stream.Dispose();

每次运行时,都会抛出NotSupportedException,告诉我无法写入流。为什么会这样?第2行中显示的初始化的最后一个参数显然是正确的,所以我应该能够写入流。 如果我没有指定起始索引和计数,它就可以工作。

为什么会这样?

2 个答案:

答案 0 :(得分:9)

始终(几乎总是)在构造函数中创建没有参数的内存流:

 using (MemoryStream stream = new MemoryStream())
        {
            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                writer.Write(1);
            }
            stream.Flush();
            byte[] bytes = stream.GetBuffer();
            //use it
        }

此代码可以正常使用

答案 1 :(得分:3)

From MSDN

  

初始化MemoryStream类的新不可调整大小的实例   基于字节数组的指定区域,使用CanWrite   属性设置为指定。

BinaryWriter开始在流的末尾写入,因此需要调整它以便能够写入,但这是不允许的。您只能写入已分配的流的字节。