我经常遇到这样的问题:我有一个数据流,并希望将其中的所有内容写入另一个流.
所有代码示例都使用字节数组形式的缓冲区.
有更优雅的方式吗?
如果不是,那么缓冲区的理想大小是多少.哪些因素构成了这个价值?
在.NET 4.0中,我们终于得到了一个Stream.CopyTo
方法!好极了!
关于理想的缓冲区大小:
"当使用Read方法时,使用与流的内部缓冲区大小相同的缓冲区更为有效,其中内部缓冲区设置为所需的块大小,并始终读取小于块大小.如果在构造流时未指定内部缓冲区的大小,则其默认大小为4千字节(4096字节)."
任何流读取过程都将使用Read(char buffer [],int index,count),这是此引用所引用的方法.
http://msdn.microsoft.com/en-us/library/9kstw824.aspx(在"备注"下).
我不确定你是否可以在.NET中直接将一个流传输到另一个流,但这是一个用中间字节缓冲区来完成它的方法.缓冲区的大小是任意的.最有效的大小主要取决于您传输的数据量.
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(流)