MemoryStream类在System.IO命名空间中的相关性

时间:2013-04-01 19:37:11

标签: c# .net memory-management

为什么MemoryStream类出现在System.IO命名空间中?

鉴于System.IO完全是关于磁盘等的输入/输出操作,而MemoryStream将存储在内存中。

3 个答案:

答案 0 :(得分:3)

  

鉴于System.IO完全是关于磁盘等的输入/输出操作

不,System.IO完全是关于输入/输出操作,在这种意义上,从内存流中写入或读取仍然是IO。

这样说:如果将文件保存到MemoryStream,那么保存操作的输出是不是?如果从MemoryStream加载XML文档,那不是解析器的输入吗?

namespace documentation州:

  

System.IO命名空间包含允许读写文件和数据流的类型,以及提供基本文件和目录支持的类型。

您的视图中MemoryStream不是“数据流”吗?如果没有,为什么不呢?

为什么命名空间已将MemoryStream放入?

答案 1 :(得分:1)

有时您希望使用以Stream作为输入的方法,但您没有文件/网络/任何流来提供它。在这种情况下,您创建一个MemoryStream来提供一个接口,用于将数据写入相当于字节数组包装器的数据。

答案 2 :(得分:1)

我在上面回答了令人尊敬的Jon Skeet的回答,但我会再添加一些推理。

由于编码操作数据流的大多数操作都在System.IO.Stream抽象类(无法直接实例化)上运行,因此所有这些操作都将与从System.IO.Stream继承的任何操作兼容。 ,例如System.IO.FileStream或System.IO.BufferedStream。这对我们开发人员来说非常好 - 只要存储介质具有兼容的System.IO.Stream继承类来处理IO,我们就可以在任何我们喜欢的地方开发处理数据的软件。我希望你同意,文件系统访问等等存在于System.IO中。

但是,即使你认为内存不是真正的IO(我在那里不同意),System.IO.MemoryStream类仍然继承System.IO.Stream,并提供使用System.IO.FileStream执行与文件相同的操作的简单而一致的方法,只需使用瞬态内存存储。

正如Jon所说,因为它继承自System.IO.Stream,并为数据的输入和输出提供了一个抽象的内存支持存储,你会把它放在哪里呢?