gpt4 book ai didi

.net - MemoryStream 上的 GetBuffer() 什么时候有用?

转载 作者:行者123 更新时间:2023-12-03 08:36:31 26 4
gpt4 key购买 nike

我知道 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/

26 4 0