【发布时间】:2010-11-29 05:09:38
【问题描述】:
BufferedStream和MemoryStream在应用方面有什么区别? 既然 MemoryStream 可以随时刷入文件,那它不能代替 BufferedStream 吗?
【问题讨论】:
标签: c#
BufferedStream和MemoryStream在应用方面有什么区别? 既然 MemoryStream 可以随时刷入文件,那它不能代替 BufferedStream 吗?
【问题讨论】:
标签: c#
BufferedStream 只是现有流的缓冲区。 MemoryStream 是 整个 流的缓冲区 - 它没有链接到另一个流。您可以随时要求它将自己写入另一个流,但这不是一回事。
缓冲的主要原因之一是避免频繁写入昂贵的资源。但是,这并不意味着您要在内存中缓冲 所有 数据 - 足以避免非常小的写入。例如,如果FileStream 没有其自己的 缓冲策略,那么将其包装在BufferedStream 中可能最终只有8K 的缓冲区,即使您写入数兆字节的数据。正如 cmets 中指出的那样,FileStream has enough buffering that using BufferedStream in conjunction with it is pointless.
【讨论】:
BufferedStream 必须由其他一些现有的 Stream 初始化。一个简单的关闭会触发将缓冲区刷新到底层流。处理非内存流时需要它,但您需要(自动)缓冲。
MemoryStream 可以单独存在,但也可以按照您所说的“显式”刷新到其他流。
如果您的工作只在内存上,最好使用 MemoryStream。否则,BufferedStream。
【讨论】: