从一个流复制到另一个流?

Cor*_*urn 8 c# .net-2.0

为了工作,我的项目规范是使用.Net 2.0,所以我没有得到CopyTo以后带来的便利功能.

我需要将响应流从一个流复制HttpWebResponse到另一个流(很可能是一个MemoryStream,但它可能是任何子类Stream).我的正常策略有以下几点:

BufferedStream bufferedresponse = new BufferedStream(HttpResponse.GetResponseStream());
int count = 0;
byte[] buffer = new byte[1024];
do {
    count = bufferedresponse.Read(buffer, 0, buffer.Length);
    target.Write(buffer, 0, count);
} while (count > 0);
bufferedresponse.Close();
Run Code Online (Sandbox Code Playgroud)

有更有效的方法吗?缓冲区的大小真的重要吗?在.Net 2.0中从一个流复制到另一个流的最佳方法是什么?

PS这是用于下载200 + MB以上的大型GIS图像.当然,可靠性至关重要.

Mag*_*nus 9

这是一个方便的功能.是的,缓冲区大小很重要.增加它可能会在大文件上提供更好的性能.

public static void WriteTo(Stream sourceStream, Stream targetStream)
{
       byte[] buffer = new byte[0x10000];
       int n;
       while ((n = sourceStream.Read(buffer, 0, buffer.Length)) != 0)
           targetStream.Write(buffer, 0, n);
}
Run Code Online (Sandbox Code Playgroud)