有没有办法在byte []和Stream之间转换而不复制?

时间:2013-06-20 17:43:53

标签: .net memorystream

我需要将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"
        }
    }

1 个答案:

答案 0 :(得分: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

同样,您需要确切地确定实际写入了多少数据。