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-8BufferedReader
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-8BufferedReader
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()
像这样的问题表明提问的人对性能有着不健康的执迷。:-)像这样的问题表明,提出问题的人对绩效有着不健康的执念。:-)