当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在.net中将一个流的内容写入另一个流?》经验,为你挑选了4个好方法。

我经常遇到这样的问题:我有一个数据流,并希望将其中的所有内容写入另一个流.

所有代码示例都使用字节数组形式的缓冲区.

有更优雅的方式吗?

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



1> Thomas Danec..:

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


这正是它!
我反编译成Stream.CopyTo方法,它调用"this.InternalCopyTo(destination,81920);" 整数值是缓冲区大小.看起来像疯狂的缓冲区大小相比大多数缓冲技术似乎采用的标准4k.任何人都可以评论这个吗?
看起来这个数字只是试图避免使用大对象堆,这将在该数量的略微偏北.

2> core..:

关于理想的缓冲区大小:

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

任何流读取过程都将使用Read(char buffer [],int index,count),这是此引用所引用的方法.

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



3> Bill the Liz..:

我不确定你是否可以在.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);
}



4> 小智..:

BufferedStream.CopyTo(流)

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有