Sim*_*Cat 5 c# memorystream stream
我正在尝试将流写入ram而不是文件.我试过这样做:
Stream stream = new MemoryStream();
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, objectToSerialize);
stream.Close();
return stream;
Run Code Online (Sandbox Code Playgroud)
但是当我在写完它之后查看流时,它会说"Length ='stream.Length'抛出了'System.ObjectDisposedException'类型的异常"
在获取数据之前不要关闭流,也不要返回流,而是返回流的内容:
using (Stream stream = new MemoryStream()) {
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, objectToSerialize);
return stream.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
您正在调用,这与在流上stream.Close()调用完全相同。Dispose()
只要删除那行代码就可以了。基本上,您需要MemoryStream在返回时保持打开状态。
另一方面,根据您要执行的操作,您可能还需要重置流的位置。我怀疑你会想要:
Stream stream = new MemoryStream();
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, objectToSerialize);
stream.Position = 0;
return stream;
Run Code Online (Sandbox Code Playgroud)
这与您的代码的工作方式相同,但不影响Dispose()流(因为它不再调用stream.Close()),并且还将其重置到开始位置,如果您想读回对象/数据,这通常是必需的。