是否可以克隆.NET流?

时间:2010-03-22 06:50:19

标签: c# .net

我们可以克隆一个流吗?

3 个答案:

答案 0 :(得分:14)

不,流通常是指某种本地资源(套接字,文件句柄等),因此无法克隆或序列化。此外,许多流只是前向的,不支持搜索,因此您甚至无法从流中重新读取。

您可以从可读流中执行的操作是将其复制到可以作为字节数组移动的MemoryStream中。

有关如何执行此操作的代码段,请参阅以下帖子: How do I copy the contents of one stream to another?

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

答案 1 :(得分:3)

没有。克隆不是Stream类上通常支持的操作。为此,它必须包含Stream类的所有可能实现。

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

答案 2 :(得分:1)

不,您无法克隆通用流。