48 .net memorystream
.NET MemoryStream似乎没有.Reset或.Clear方法.
我正在考虑使用以下代码来完成此任务:
ms.Seek(0, IO.SeekOrigin.Begin)
ms.SetLength(0)
Run Code Online (Sandbox Code Playgroud)
清除或重置现有.NET MemoryStream的正确方法是什么?
And*_*zub 73
为什么需要重置内存流?你总能创造一个新的.或者您可以使用:
memoryStream.SetLength(0);
Run Code Online (Sandbox Code Playgroud)
Ran*_*Ian 21
由于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);
}
Run Code Online (Sandbox Code Playgroud)
说MemoryStream.SetLength单独重置或清除MemoryStream是不正确的,因为如果长度超过当前缓冲区的长度,SetLength只清除内部缓冲区数组.
重新初始化MemoryStream是一种有效的方法,但效率较低.重新初始化MemoryStream的一个好处是保证流永远不会关闭.关闭MemoryStream后,将无法再更改它.如果您可以确保MemoryStream实例未关闭,那么清除缓冲区可能就是您的选择.
omg*_*bah -5
内存流没有重置/清除方法,因为它是多余的。通过将其设置为零长度,您可以清除它。
当然,你总是可以这样做:
memoryStream = new MemoryStream(memoryStream.Capacity());
Run Code Online (Sandbox Code Playgroud)
这将产生一个与初始化大小相同的内存流。
如果您确实想手动清除流,我怀疑您将不得不诉诸循环元素。