我试过这段代码:
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行中显示的初始化的最后一个参数显然是正确的,所以我应该能够写入流。 如果我没有指定起始索引和计数,它就可以工作。
为什么会这样?
答案 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)
初始化MemoryStream类的新不可调整大小的实例 基于字节数组的指定区域,使用CanWrite 属性设置为指定。
BinaryWriter
开始在流的末尾写入,因此需要调整它以便能够写入,但这是不允许的。您只能写入已分配的流的字节。