如何在.net中将一个stream的内容写入另一个stream?

我经常遇到这样的问题:我有一个数据stream充满了数据,并希望把它的所有内容写入另一个数据stream。

所有代码示例都以字节数组的forms使用缓冲区。

有没有更优雅的方式呢?

如果不是,缓冲区的理想大小是多less? 哪些因素构成了这个价值?

关于理想的缓冲区大小:

“使用Read方法时,使用与内部缓冲区大小相同的缓冲区更为有效,其中内部缓冲区设置为所需的块大小,并始终读取小于块大小的值。如果在构造stream时未指定内部缓冲区的大小,则其默认大小为4千字节(4096字节)。

任何stream读取过程将使用Read(char buffer [],int index,count),这是引用引用的方法。

http://msdn.microsoft.com/en-us/library/9kstw824.aspx (在“备注”下)。

在.NET 4.0中,我们终于得到了一个Stream.CopyTo方法! 好极了!

我不确定您是否可以直接在.NET中将一个stream传递给另一个stream,但是这里有一个方法可以使用中间字节缓冲区。 缓冲区的大小是任意的。 最有效的大小将主要取决于您传输的数据量。

 static void CopyStream(Stream input, Stream output){ byte[] buffer = new byte[0x1000]; int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) output.Write(buffer, 0, read); } 

BufferedStream.CopyTo(stream)

将FileStream中的数据读入通用stream

可能会有一些方向进去

我不知道比使用缓冲区更优雅的方式。

但是缓冲区的大小可以有所作为。 记住有关Vista的文件复制的问题? 原因是(基本上)改变了缓冲区大小。 这篇博文中解释了这些变化。 你可以从这篇文章中学到主要因素。 但是,这仅适用于文件复制。 在应用程序中,可能需要大量的内存拷贝,所以在这种情况下,4KB可能是最好的缓冲区大小, 正如.NET文档所build议的那样 。