【问题标题】:The relevance of MemoryStream class in System.IO namespace [closed]System.IO 命名空间中 MemoryStream 类的相关性
【发布时间】:2013-04-01 19:37:11
【问题描述】:

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

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

【问题讨论】:

  • 其实System.IO是关于文件和数据的输入/输出操作。
  • 谁说IO只和磁盘有关?

标签: c# .net memory-management


【解决方案1】:

鉴于 System.IO 是关于输入/输出操作 wrt 到磁盘等

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

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

namespace documentation 声明:

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

MemoryStream 在您看来不是“数据流”吗?如果没有,为什么不呢?

为什么要在命名空间中放入MemoryStream

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我赞同上面尊敬的 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,并为数据的输入和输出提供了一个抽象的内存支持存储,那么您会将它放在哪里?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 2022-12-31
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 2011-12-01
        相关资源
        最近更新 更多