Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使一个流的输出成为另一个流的输入的最佳方法是什么_.net_Iostream - Fatal编程技术网

.net 使一个流的输出成为另一个流的输入的最佳方法是什么

.net 使一个流的输出成为另一个流的输入的最佳方法是什么,.net,iostream,.net,Iostream,我想知道除了使用字节缓冲区和循环之外,是否还有更好的/内置的方法从一个流中读取并写入另一个流(在.NET中)。通常,这样做是为了将变换应用于流并将其移动 在本例中,我正在加载一个文件,将其放入一个deflate流并将其写入一个文件(为了简单起见,删除了错误处理): 编辑: .NET 4.0现在有一个Stream.CopyTo函数,Hallelujah现在我想起来了,我从来没有见过任何内置的支持将输入流的结果直接传输到您描述的输出流中。有一些“StreamPipeline”类的代码,可以完成您描述

我想知道除了使用字节缓冲区和循环之外,是否还有更好的/内置的方法从一个流中读取并写入另一个流(在.NET中)。通常,这样做是为了将变换应用于流并将其移动

在本例中,我正在加载一个文件,将其放入一个deflate流并将其写入一个文件(为了简单起见,删除了错误处理):

编辑:


.NET 4.0现在有一个Stream.CopyTo函数,Hallelujah

现在我想起来了,我从来没有见过任何内置的支持将输入流的结果直接传输到您描述的输出流中。有一些“StreamPipeline”类的代码,可以完成您描述的那种事情。

没有比这更好的方法了,尽管我倾向于将循环部分放入
CopyTo
扩展方法中,例如

public static void CopyTo(this Stream source, Stream destination)
{
    var buffer = new byte[0x1000];
    int bytesInBuffer;
    while ((bytesInBuffer = source.Read(buffer, 0, buffer.Length)) > 0)
    {
        destination.Write(buffer, 0, bytesInBuffer);
    }
}
你可以称之为:

fsin.CopyTo(ds);

.NET 4.0现在有了一个功能

是的,如果我们使用3.5,我会这样做。通常我们把它放在一个静态方法库中。事实上,它过去被称为StreamCopier.Copy before 3.5:-)请注意,如果您使用的是.NET 2.0,只要您使用的是C#3,就可以了。您仍然可以通过一些技巧使用扩展方法。看见
fsin.CopyTo(ds);