我需要将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"
}
}
答案 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
同样,您需要确切地确定实际写入了多少数据。