我正在浏览java.io,有些方面让我感到困惑:
FileReader和InputStreamReader的性能有什么不同吗?
Reader fileReader = new FileReader("input.txt");
Reader fileReader2 = new InputStreamReader(new FileInputStream("input.txt"));哪一个比另一个更好?
发布于 2015-05-11 09:00:19
没什么区别。在查看源代码时,您可以理解这一点:
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):带有指定Charset的新BufferedReader。
发布于 2015-05-11 09:03:05
我不会把注意力集中在表演上。我会关注它们之间的巨大正确性差异:FileReader总是使用平台-默认编码,这几乎不是一个好主意。
我认为这实际上比在Charset构造函数中指定InputStreamReader略高一些(至少在某些情况下是这样),即使您传入了平台默认的Charset,但为了清晰和正确,我仍然会这样做。
当然,现在我可能会直接使用Files.newBufferedReader作为一种更简单的方法: a)让我指定Charset;b)默认为UTF-8,这是我通常想要的;c)创建一个BufferedReader,这也是我经常想要的,主要是为了readLine()。
https://stackoverflow.com/questions/30163430
复制相似问题