InputStreamReader与FileReader

除了初始化两者之外,我似乎无法确定InputStreamReaderFileReader之间的任何区别。 使用其中一个有什么好处吗? 大多数其他文章涵盖FileInputStream vs InputStreamReader ,但我与FileReader形成对比。 在我看来,他们都有相同的目的。

首先, InputStreamReader可以处理所有输入流,而不仅仅是文件。 其他示例是网络连接,类路径资源和ZIP文件。

其次, FileReader不允许您指定编码,而是使用平台默认编码,这使得它几乎无用,因为当代码在具有不同平台默认编码的系统上运行时,使用它将导致数据损坏。

简而言之,忘记FileReader存在。

FileReader从文件系统中的文件中读取字符。 InputStreamReader从任何类型的输入流中读取字符。 流可以是FileInputStream,但也可以是从套接字,HTTP连接,数据库blob等获得的流。

我通常更喜欢使用包装FileInputStream的InputStreamReader来读取文件,因为它允许指定特定的字符编码。

FileReader扩展了InputStreamReader。 唯一的区别是FileReader有一些构造函数,它们假设你正在读取一个文件,如String filenameFile fileFileDescriptor fd

我建议您查看FileReader的源代码以了解更多信息。