0

私は閉じられた MemoryStream のインスタンスを持っています (尋ねないでください、それを変更することはできません。一見するとそれほど悪いデザインではありません:)。とにかく、次のようなものを使用して byte[] を取得できることがわかりました。

MemoryStream ms = SomeClass.GetMemoryStream();
byte[] myData = ms.GetBuffer();

これまでのところすべてがうまくいっているようですが、私が抱えている唯一の問題は、GetBuffer() から返されたバイト配列のサイズが変更され、未割り当て領域 (バイト)0 が含まれていることです。そのようです:

12,32,43,43,2,3,0,0,0,0,0,0,0

私の質問は、最初の 0 に遭遇するまで配列を読み取ることができると仮定しても安全ですか? データの途中に (バイト)0 がある場合を知っていますか? データは MIME 電子メール メッセージです。

4

2 に答える 2

3

MemoryStream.GetBuffer メソッドに関するmsdn の記事には、

バッファーには、未使用の可能性がある割り当てられたバイトが含まれていることに注意してください。たとえば、文字列 "test" が MemoryStream オブジェクトに書き込まれた場合、GetBuffer から返されるバッファーの長さは 4 ではなく 256 で、252 バイトが未使用です。バッファー内のデータのみを取得するには、ToArray メソッドを使用します。ただし、ToArray はメモリ内にデータのコピーを作成します。

コピーにもかかわらず、それはあなたがすべきことのように見えます...

于 2011-11-18T13:13:07.133 に答える
3

試してくださいms.ToArray()http://msdn.microsoft.com/en-us/library/system.io.memorystream.toarray.aspx

閉じたストリームで機能し、バッファの未使用部分を除いてデータのコピーを返します。

于 2011-11-18T13:14:49.743 に答える