刚刚想到为什么 System.IO 命名空间中存在 MemoryStream 类?
鉴于 System.IO 都是关于对磁盘等的输入/输出操作,并且 MemoryStream 将存储在内存中。
刚刚想到为什么 System.IO 命名空间中存在 MemoryStream 类?
鉴于 System.IO 都是关于对磁盘等的输入/输出操作,并且 MemoryStream 将存储在内存中。
鉴于 System.IO 都是关于对磁盘等的输入/输出操作
不,System.IO
都是关于输入/输出操作的,从这个意义上讲,从内存流中写入或读取仍然是 IO。
这么说吧:如果您将文件保存到 a MemoryStream
,那不是保存操作的输出吗?如果从 加载 XML 文档MemoryStream
,那不是解析器的输入吗?
命名空间文档指出:
System.IO 命名空间包含允许读取和写入文件和数据流的类型,以及提供基本文件和目录支持的类型。
在你看来是MemoryStream
不是“数据流”?如果不是,为什么不呢?
为什么要放入命名空间MemoryStream
?
有时您想使用一种将 aStream
作为输入的方法,但您没有文件/网络/任何流来提供它。在这种情况下,您创建一个MemoryStream
提供接口,用于将数据写入字节数组包装器。
我支持上面尊敬的 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,并为数据的输入和输出提供了一个抽象的内存支持存储,那么您会将它放在哪里呢?