栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将一个流的内容复制到另一个?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将一个流的内容复制到另一个?

从.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);    }}

注1:此方法将允许您报告进度(到目前为止已读取x字节…)
注2:为什么使用固定缓冲区大小而不是

input.Length
?因为该长度可能不可用!从文档:

如果从Stream派生的类不支持查找,则对Length,SetLength,Position和Seek的调用将引发NotSupportedException。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号