即使存在异常(很可能在文件 I/O 上),流也应该真正被处理掉 - using 子句是我最喜欢的方法,因此要编写 MemoryStream,您可以使用:
using (FileStream file = new FileStream("file.bin", FileMode.Create, FileAccess.Write)) {
memoryStream.WriteTo(file);
}
再读一遍:
using (FileStream file = new FileStream("file.bin", FileMode.Open, FileAccess.Read)) {
byte[] bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
ms.Write(bytes, 0, (int)file.Length);
}
如果文件很大,那么值得注意的是,读取操作将使用两倍于文件总大小的内存。一种解决方案是从字节数组创建 MemoryStream - 以下代码假定您不会写入该流。
MemoryStream ms = new MemoryStream(bytes, writable: false);
我的研究(如下)表明,内部缓冲区与您传递的字节数组相同,因此应该可以节省内存。
byte[] testData = new byte[] { 104, 105, 121, 97 };
var ms = new MemoryStream(testData, 0, 4, false, true);
Assert.AreSame(testData, ms.GetBuffer());