当Stream.Read()存在时,StreamReader的目的是什么?

这一直困扰着我。 我知道Stream是一个抽象类,因此无法实例化,但它具有从中派生的类。 为什么有StreamReader类和Stream.Read()方法( 反之StreamWriterStream.Write() )? 您可以使用300万种不同的方法写入文本文件,尝试在System.IO命名空间中了解所有这些不同的类型和方法是相当令人沮丧的。 我找到了关于作者和读者对象或派生的流对象本身之间的差异的问题和答案,但没有关于这个特定情况的问题。

TextReader (派生StreamReader )与字符串一起使用。 Stream使用字节。 文本和字节之间的转换由Encoding执行。

根据文件文本或二进制文件的内容选择正确的类。

理解文本和字节之间的区别非常重要。

StreamReader是一个TextReader ,这意味着它是一个Stream包装器。 TextReader将文本数据(字符串或字符)转换(或编码)为byte []并将其写入底层Stream

看看这两个实现之间的区别,你可以看到StreamReader派生自TextReader ,正如声明的那样,它处理文本而不是字节。 在我看来,它是想要使用文本表示的用户的抽象。 当然,底层实现需要Stream来使用这些数据,但会为最终用户提供一定程度的抽象。

这两种情况用于不同的场景

使用流类时,可以访问该文件以进行读写。 但是当你使用streamreader类时,你可以使用它来只读。 这样可以防止写入文件的使用。 有时此类用于安全目的。 例如,对于只读的系统文件。