Java InputStreamReader上的文件读取器

Java InputStreamReader上的文件读取器,java,Java,我正在浏览java.io,有些方面让我感到困惑: FileReader和InputStreamReader之间是否有性能差异? Reader fileReader = new FileReader("input.txt"); Reader fileReader2 = new InputStreamReader(new FileInputStream("input.txt")); 哪一个比另一个好?没有区别。通过查看源代码,您可以理解这一点: public class FileReader ex

我正在浏览
java.io
,有些方面让我感到困惑:
FileReader
InputStreamReader
之间是否有性能差异?

Reader fileReader = new FileReader("input.txt");
Reader fileReader2 = new InputStreamReader(new FileInputStream("input.txt"));

哪一个比另一个好?

没有区别。通过查看源代码,您可以理解这一点:

public class FileReader extends InputStreamReader {
    // ...
    public FileReader(String fileName) throws FileNotFoundException {
        super(new FileInputStream(fileName));
    }
    // ...
}
所以这只是一个语法上的糖分
FileReader
扩展了
InputStreamReader
,但除了构造函数之外没有其他更改

还要注意的是,
FileReader
使用系统默认文件编码,无法使用它指定自定义编码。我建议你不要用它。在现代Java 1.7+NIO中,有一些新的首选方法:

java.nio.file.Files.newBufferedReader(路径)
:新的UTF-8
BufferedReader

java.nio.file.Files.newBufferedReader(路径,字符集)
:新的
BufferedReader
与指定的
Charset

没有区别。通过查看源代码,您可以理解这一点:

public class FileReader extends InputStreamReader {
    // ...
    public FileReader(String fileName) throws FileNotFoundException {
        super(new FileInputStream(fileName));
    }
    // ...
}
所以这只是一个语法上的糖分
FileReader
扩展了
InputStreamReader
,但除了构造函数之外没有其他更改

还要注意的是,
FileReader
使用系统默认文件编码,无法使用它指定自定义编码。我建议你不要用它。在现代Java 1.7+NIO中,有一些新的首选方法:

java.nio.file.Files.newBufferedReader(路径)
:新的UTF-8
BufferedReader

java.nio.file.Files.newBufferedReader(路径,字符集)
:使用指定的
字符集创建新的
BufferedReader
,我不会关注性能。我将重点关注它们之间巨大的正确性差异:
FileReader
总是使用平台默认编码,这几乎从来都不是一个好主意

我认为这实际上比在
InputStreamReader
构造函数中指定
Charset
稍微有效(至少在某些情况下),即使您传入平台默认
Charset
,但为了清晰和正确,我仍然会使用后者


当然,这些天我可能会直接使用
文件.newbufferedraider
作为一种更简单的方法,a)让我指定
字符集
;b) 默认为UTF-8,这是我通常想要的;c) 创建一个
BufferedReader
,这也是我经常想要的,主要是为了
readLine()

我不会关注性能。我将重点关注它们之间巨大的正确性差异:
FileReader
总是使用平台默认编码,这几乎从来都不是一个好主意

我认为这实际上比在
InputStreamReader
构造函数中指定
Charset
稍微有效(至少在某些情况下),即使您传入平台默认
Charset
,但为了清晰和正确,我仍然会使用后者


当然,这些天我可能会直接使用
文件.newbufferedraider
作为一种更简单的方法,a)让我指定
字符集
;b) 默认为UTF-8,这是我通常想要的;c) 创建一个
BufferedReader
,这也是我经常想要的,主要是为了
readLine()

像这样的问题表明提问的人对性能有着不健康的执迷。:-)像这样的问题表明,提出问题的人对绩效有着不健康的执念。:-)