重置或清除.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,那么清除缓冲区可能就是要走的路。