将FileStream中的数据读入通用流

将流读入另一个流的最有效方法是什么? 在这种情况下,我试图将文件流中的数据读入通用流。 我知道我可以做以下事情:
1.逐行读取并将数据写入流
2.读取块的字节并写入流
等等

我只是想找到最有效的方法。

谢谢

Stephen Toub在他的MSDN .NET问题专栏中讨论了一个流管道。 在文章中,他描述了一个从一个输入流复制到另一个流的CopyStream()方法。 这听起来与你想要做的非常相似。

我汇总了一个快速扩展方法(所以只有VS 2008 w / 3.5):

public static class StreamCopier { private const long DefaultStreamChunkSize = 0x1000; public static void CopyTo(this Stream from, Stream to) { if (!from.CanRead || !to.CanWrite) { return; } var buffer = from.CanSeek ? new byte[from.Length] : new byte[DefaultStreamChunkSize]; int read; while ((read = from.Read(buffer, 0, buffer.Length)) > 0) { to.Write(buffer, 0, read); } } } 

它可以这样使用:

  using (var input = File.OpenRead(@"C:\wrnpc12.txt")) using (var output = File.OpenWrite(@"C:\wrnpc12.bak")) { input.CopyTo(output); } 

您也可以略微交换逻辑并编写CopyFrom()方法。

读取字节缓冲区然后写入它是最快的。 像ReadLine()这样的方法需要查找行分隔符,这比仅填充缓冲区需要更多的时间。

我假设通用流,你的意思是任何其他类型的流,如内存流等。

如果是这样,最有效的方法是读取块的字节并将它们写入收件人流。 块大小可以是512字节。