当 Stream.Read() 存在时,StreamReader 的目的是什么?
本文关键字:StreamReader 是什么 Read Stream 存在 | 更新日期: 2023-09-27 18:35:21
这一直困扰着我。我知道 Stream 是一个抽象类,因此无法实例化,但它具有从它派生的类。为什么有一个 StreamReader 类和一个 Stream.Read() 方法(以及 StreamWriter 和 Stream.Write())的反面)?您可以使用 300 万种不同的方法写入文本文件,试图让我了解 System.IO 命名空间中的所有这些不同类型和方法相当令人沮丧。我找到了有关编写器和读取器对象或派生流对象本身之间的差异的问题和答案,但没有关于此特定情况的问题和答案。
TextReader
(StreamReader
派生自)适用于字符串。 Stream
适用于字节。文本和字节之间的转换由Encoding
执行。
根据文件文本或二进制的内容选择正确的类。
了解文本和字节之间的区别非常重要。
StreamReader
是一个TextReader
,这意味着它是一个Stream
包装器。TextReader
会将文本数据(字符串或字符)转换(或编码)为 byte[] 并将它们写到底层Stream
。
查看两种实现之间的差异,您可以看到StreamReader
派生自 TextReader
,如声明的那样,它处理文本而不是字节。在我看来,对于想要使用文本表示的用户来说,这是一个抽象。当然,底层实现需要一个Stream
来使用此类数据,但会为最终用户提供一定程度的抽象。
这两种
情况用于不同的场景
使用流类时,可以访问文件进行读取和写入。但是当你使用流阅读器类时,你可以使用它只读。这会阻止使用要写入的文件。有时,此类用于安全目的。例如,对于只读的系统文件。