【发布时间】:2019-11-18 16:38:48
【问题描述】:
下面是一张来自 C# 7.0 的 Nutshell 书中的图片:
Q1-从图中可以推断出只有 backing store 流,例如FileStream 可以直接“连接”到文件,但是我们不是可以直接使用 StreamReader/StreamWriter 来读/写文件吗?
Q2-书中还说:
适配器包装流,就像装饰器一样。然而,与装饰器不同的是,适配器本身并不是一个流。它通常完全隐藏面向字节的方法
但是图中的StreamReader/StreamWriter等不是被标记为流适配器吗?如果它们不被视为流,它们如何被称为“流适配器”?
【问题讨论】:
-
Q1) 为了让
StreamWriter/StreamReader从文件中写入/读取,它们需要使用FileStream构造。FileStream本身可以直接从文件中写入/读取。 Q2)它们是适配器,因为您不能再将它们用作流,即您不能在GZipStream中装饰StreamReader。但是,您可以使用另一个装饰器来装饰GZipStream,因为装饰器本身就是一个Stream对象。 -
重新审视“直接”这个词。
new StreamReader("file.txt")在后台创建一个 FileStream。图片是对的。