如何在.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议的那样 。