FileStader通过InputStreamReader

时间:2015-05-11 08:59:11

标签: java

我要过java.io,有些方面让我感到困惑:
FileReaderInputStreamReader之间是否有任何性能差异?

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

哪一个优于另一个?

2 个答案:

答案 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