C#/。NETのMemoryStreamでは注意して使用する必要があることを知っています。これGetBuffer()
は、ドキュメントで説明されているように、最後に未使用のバイトが存在する可能性があるため、最初の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がプライベートであり、それを取得する方法がないことです...
だから私の質問は-MemoryStreamがどのように構築されたか(これが_originを設定するものです)についての事前の知識がなくてもGetBuffer()
、どのような用途がありますか?MemoryStream()
(原点を設定するのはこのコンストラクターであり、このコンストラクターのみです-バイト配列内の特定のインデックスで始まるバイト配列の周りにMemoryStreamが必要な場合:
public MemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible)
)。