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

本文关键字:相关性 IO 命名空间 类在 System MemoryStream | 更新日期: 2023-09-27 18:06:47

刚刚想到为什么MemoryStream类出现在System中。IO命名空间?

给定系统。IO是所有关于输入/输出操作wrt到磁盘等,MemoryStream将存储在内存中。

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

给定系统。IO都是关于磁盘的输入/输出操作,等等

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

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

命名空间文档说明:

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

MemoryStream不是"数据流"吗?在你看来?如果不是,为什么不呢?

为什么MemoryStream放在命名空间中?

有时你想使用一个方法,以Stream作为输入,但你没有一个文件/网络/任何流给它。在本例中,您创建一个MemoryStream来提供一个接口,用于将数据写入相当于字节数组包装器的内容。

我同意上面可敬的Jon Skeet的回答,但我将添加更多的推理。

由于大多数用于操作数据流的代码操作都是在System.IO. stream抽象类(不能直接实例化)上操作的,因此所有这些操作都将与继承自System.IO的任何操作兼容。流,如system . io . fileststream或System.IO.BufferedStream。这对我们开发人员来说是件好事——我们可以在任何我们喜欢的地方开发处理数据的软件,只要存储介质具有兼容的System.IO。处理IO的流继承类。我希望您会同意文件系统访问等应该驻留在System.IO中。

然而,即使你确实认为内存不是真正的IO(我不同意),System.IO. memorystream类仍然继承了System.IO。流,并提供了一种漂亮而一致的方式来完成与使用System.IO处理文件相同的工作。文件流,只是使用内存中的瞬时存储。

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