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