我知道 GetBuffer()
在 C#/.NET 中的 MemoryStream 上必须小心使用,因为正如文档所描述的 here ,最后可能有未使用的字节,因此您必须确保只查看缓冲区中的第一个 MemoryStream.Length 字节。
但是昨天我遇到了一个情况,缓冲区开头的字节是垃圾!确实,如果您使用反射器之类的工具并查看 ToArray()
,你可以看到这个:
public virtual byte[] ToArray()
{
byte[] dst = new byte[this._length - this._origin];
Buffer.InternalBlockCopy(this._buffer, this._origin, dst, 0,
this._length - this._origin);
return dst;
}
所以要对
GetBuffer()
返回的缓冲区做任何事情,你真的需要知道_origin。唯一的问题是 _origin 是私有(private)的,没有办法得到它......所以我的问题是 -
GetBuffer()
有什么用?在 MemoryStream()
没有一些关于 MemoryStream 是如何构造的先验知识(这是什么设置 _origin)?(正是这个构造函数,并且只有这个构造函数,才能设置原点——因为当你想要一个围绕字节数组的 MemoryStream 时,该字节数组从字节数组中的特定索引开始:
public MemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible)
)
最佳答案
如果你真的想访问内部 _origin 值,你可以使用 MemoryStream.Seek(0, SeekOrigin.Begin) 调用。返回值将完全是 _origin 值。
关于.net - MemoryStream 上的 GetBuffer() 什么时候有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053739/