重置或清除.NET MemoryStream
.NET MemoryStream似乎没有.Reset或.Clear方法。
我正在考虑使用下面的代码来实现这一点:
ms.Seek(0, IO.SeekOrigin.Begin) ms.SetLength(0)
什么是清除或重置现有的.NET MemoryStream的正确方法?
内存stream没有重置/清除方法,因为它是多余的。 通过将其设置为零,您可以清除它。
当然你可以随时做:
memoryStream = new MemoryStream(memoryStream.Capacity());
这会产生一个与初始化相同大小的内存stream。
如果你真的想手动清除stream,我怀疑你将不得不求助于循环的元素。
为什么你需要重置内存stream? 你总是可以创build一个新的。 或者你可以使用:
memoryStream.SetLength(0);
由于MemoryStream本质上是一个带有索引(和其他支持成员)的字节数组,清除字节数组和重置索引可以被认为是重置和清除MemoryStream。 如果MemoryStream的初始状态是位置为零的归零数组,那么MemoryStream重置的示例可以是:
public static void Clear(this MemoryStream source) { byte[] buffer = source.GetBuffer(); Array.Clear(buffer, 0, buffer.Length); source.Position = 0; source.SetLength(0); }
说MemoryStream.SetLength单独复位或清除MemoryStream是不正确的,因为如果长度超过当前缓冲区的长度,SetLength只会清除内部缓冲区数组。
重新初始化MemoryStream是一种有效的方法,但效率较低。 重新初始化MemoryStream的一个好处是保证stream不会被closures。 MemoryStreamclosures后,不能再进行更改。 如果可以确保MemoryStream实例没有closures,那么清除缓冲区可能就是要走的路。