将流读入另一个流的最有效方法是什么?在这种情况下,我正在尝试将文件流中的数据读入通用流。我知道我可以做到以下几点:
1.逐行读取并将数据写入流中
2.读取字节块并写入流中
等等
我只是想找到最有效的方式。
由于
答案 0 :(得分:7)
Stephen Toub在他的MSDN .NET问题专栏here中讨论了一个流管道。在文章中,他描述了一个从一个输入流复制到另一个流的CopyStream()方法。这听起来与你想要做的非常相似。
答案 1 :(得分:7)
我汇总了一个快速扩展方法(所以只有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()
方法。
答案 2 :(得分:1)
读取字节缓冲区然后写入它是最快的。像ReadLine()
这样的方法需要查找行分隔符,这比仅填充缓冲区需要更多的时间。
答案 3 :(得分:0)
我假设通用流,你的意思是任何其他类型的流,如内存流等。
如果是这样,最有效的方法是读取字节块并将它们写入收件人流。块大小可以是512字节。