是否可以克隆.NET流?

我们可以克隆一个流吗?

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

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

有关如何执行此操作的代码段,请参阅以下post: 如何将一个流的内容复制到另一个流?

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

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

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

不,您无法克隆通用流。