将一个流的内容复制到另一个流的最佳方式是什么?有没有一个标准的实用工具方法呢?
MemoryStream有.WriteTo(outstream);
而.NET 4.0在正常流对象上有.CopyTo。
.NET 4.0:
instream.CopyTo(outstream);
从.NET 4.5开始,就有了这个Stream.CopyToAsync方法
input.CopyToAsync(output);
这将返回一个Task可以继续完成时,如下所示:
await input.CopyToAsync(output)
// Code from here on will be run in a continuation.
请注意,根据调用的CopyToAsync位置,下面的代码可能会或可能不会在调用它的同一个线程上继续。
在SynchronizationContext调用时被抓获await将决定线程的延续将被执行的。
此外,这个调用(这是一个实现细节可能会改变)仍然顺序读写(它只是不浪费一个线程阻塞I / O完成)。
从.NET 4.0开始,就有了这个Stream.CopyTo方法
input.CopyTo(output);
对于.NET 3.5和之前
这个框架没有任何东西可以帮助解决这个问题。您必须手动复制内容,如下所示:
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[32768];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write (buffer, 0, read);
}
}