我要过java.io
,有些方面让我感到困惑:
FileReader
和InputStreamReader
之间是否有任何性能差异?
Reader fileReader = new FileReader("input.txt");
Reader fileReader2 = new InputStreamReader(new FileInputStream("input.txt"));
哪一个优于另一个?
答案 0 :(得分:3)
我不会专注于表现。我专注于它们之间的大量正确性差异:FileReader
总是使用平台默认编码,这几乎不是一个好主意。
我认为实际上比Charset
构造函数中指定InputStreamReader
更有效(至少在某些情况下),即使您传入平台默认Charset
,为了清晰和正确,我仍然会做后者。
当然,这些天我可能直接去Files.newBufferedReader
作为一种更简单的方法a)让我指定Charset
; b)默认为UTF-8,这是我通常想要的; c)创建一个BufferedReader
,这也是我经常想要的,主要是为了readLine()
。
答案 1 :(得分:2)
没有区别。您可以通过查看源代码来理解这一点:
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(Path)
:新的UTF-8 BufferedReader
java.nio.file.Files.newBufferedReader(Path, Charset)
:指定BufferedReader
的新Charset
。