我无法让它工作。我有一个 MemoryStream 对象。这节课 有一个 Position 属性,可以告诉您已读取了多少字节。
我要做的是删除0到Position-1之间的所有字节
我试过这个:
MemoryStream ms = ...
ms.SetLength(ms.Length - ms.Position);
但有时我的数据会损坏。
所以我最终这样做了
MemoryStream ms = ...
byte[] rest = new byte[ms.Length - ms.Position];
ms.Read(rest, 0, (int)(ms.Length - ms.Position));
ms.Dispose();
ms = new MemoryStream();
ms.Write(rest, 0, rest.Length);
虽然有效但效率不高。
我有什么想法可以让它发挥作用吗?
谢谢
最佳答案
这应该有效,并且比创建新缓冲区更有效:
byte[] buf = ms.GetBuffer();
Buffer.BlockCopy(buf, numberOfBytesToRemove, buf, 0, (int)ms.Length - numberOfBytesToRemove);
ms.SetLength(ms.Length - numberOfBytesToRemove);
MemoryStream.GetBuffer() 可让您访问现有缓冲区,因此您无需创建新缓冲区即可移动字节。
当然,您需要注意越界问题。
关于c# - 如何从 MemoryStream 中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733696/