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