是否可以克隆.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
中。
不,您无法克隆通用流。