克隆.NET流是可能的吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我们能克隆一个流吗?

提问于
用户回答回答于

不可以。克隆不是Stream类上普遍支持的操作。为了这样,它必须包含Stream该类的所有可能的实现。

对于像a这样的项目,这可能是可行的,FileStream但考虑这将意味着什么NetworkStream。克隆通常具有创建完全独立的对象的概念,这些对象在创建时是相同的。这通常不适用于通常包含在NetworkStream某个级别的TCP连接。

用户回答回答于

不,流通常引用某种类型的本地资源(套接字,文件句柄等),因此它们不能被克隆或序列化。此外,许多数据流仅支持前向,并且不支持查找,因此甚至无法从流中重新读取数据。

你可以从一个可读的流中做什么,然后将它复制到一个可以作为字节数组移动的MemoryStream中。

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[32768];
    while (true)
    {
        int read = input.Read (buffer, 0, buffer.Length);
        if (read <= 0)
            return;
        output.Write (buffer, 0, read);
    }
}

扫码关注云+社区