为什么MemoryStream类出现在System.IO命名空间中?
鉴于System.IO完全是关于磁盘等的输入/输出操作,而MemoryStream将存储在内存中。
答案 0 :(得分:3)
鉴于System.IO完全是关于磁盘等的输入/输出操作
不,System.IO
完全是关于输入/输出操作,在这种意义上,从内存流中写入或读取仍然是IO。
这样说:如果将文件保存到MemoryStream
,那么保存操作的输出是不是?如果从MemoryStream
加载XML文档,那不是解析器的输入吗?
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,并为数据的输入和输出提供了一个抽象的内存支持存储,你会把它放在哪里呢?