首页 > 解决方案 > IEnumerable到一个大流或 MemoryStream

问题描述

我有 IEnumerable 流。如何将其转换为一个大的 MemoryStream 或字节 []。我希望流中的所有流都附加到一个大流/内存流中。通过迭代所有流,我们遇到了某些性能问题。我正在寻找最佳解决方案。

                    using (var ms = new MemoryStream())
                        {
                            foreach (var stream in streams)
                            {
                                stream.CopyTo(ms);
                            }
                            byteData = ms.ToArray();
                        }

谢谢

标签: c#memorystream

解决方案


打电话stream.CopyTo

复制从当前流中的当前位置开始,复制操作完成后不会重置目标流的位置。

var list = new List<Stream>()
{
   new MemoryStream(new byte[] {1, 2, 3, 4}),
   new MemoryStream(new byte[] {5, 6, 7, 8}),
   new MemoryStream(new byte[] {9, 10, 11, 12})
};

var result = new MemoryStream();

foreach (var stream in list)
   stream.CopyTo(result);

var array =result.ToArray();

Console.WriteLine(string.Join(", ", array));

输出

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

推荐阅读