-4

刚刚想到为什么 System.IO 命名空间中存在 MemoryStream 类?

鉴于 System.IO 都是关于对磁盘等的输入/输出操作,并且 MemoryStream 将存储在内存中。

4

3 回答 3

3

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

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

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

命名空间文档指出:

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

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

为什么要放入命名空间MemoryStream

于 2013-04-01T19:41:26.513 回答
1

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

于 2013-04-01T19:39:13.117 回答
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,并为数据的输入和输出提供了一个抽象的内存支持存储,那么您会将它放在哪里呢?

于 2013-04-01T19:58:35.073 回答