MemoryStream类在System中的相关性.IO命名空间
本文关键字:相关性 IO 命名空间 类在 System MemoryStream | 更新日期: 2023-09-27 18:06:47
刚刚想到为什么MemoryStream类出现在System中。IO命名空间?
给定系统。IO是所有关于输入/输出操作wrt到磁盘等,MemoryStream将存储在内存中。
给定系统。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。流,并为数据的输入和输出提供了一个抽象的内存支持存储,您将把它放在哪里呢?