1

byte[] 配列をストリームに変換する必要があり (ファイルをアップロードする場合など)、コードの別の部分で、ストリームを配列に変換し直す必要があります (ファイルをダウンロードする場合など)。バイト配列のコピーを作成せずにこれらの操作を行う方法はありますか?

このコードは、MemoryStream がコピーを作成することを示しています。安全性と引き換えにメモリパフォーマンスを向上させたい.

    static void Main(string[] args)
    {
        byte[] array1 = new byte[1024];

        using (MemoryStream s = new MemoryStream(array1))
        {
            byte[] array2 = s.ToArray();
            Console.WriteLine(Object.ReferenceEquals(array1, array2)); // "false"
        }
    }
4

1 に答える 1

4

MemoryStream.GetBufferコピーを避けるために使用できます。これは「生の」バッキング バッファであり、ストリームの概念上の長さよりも長い場合があることに注意してください。

または、最初にバイト配列を提供している場合は、後でそれを使用することもできます。

byte[] buffer = new byte[1024];
using (MemoryStream stream = new MemoryStream(buffer))
{
    // Write to it here
}
// Now buffer will contain the written data

ここでも、実際に書き込まれたデータの量を正確に把握する必要があります。

于 2013-06-20T17:46:08.053 に答える