扫描仪与InputStreamReader

时间:2012-04-08 23:40:32

标签: java file input

有没有人碰巧知道下面两种读取输入文件的方法在性能方面是否存在差异? 感谢。

1)使用扫描仪和文件

读取文件
Scanner input = new Scanner(new File("foo.txt"));

2)使用InputStreamReader和FileInputStream

读取文件
InputStreamReader input = new InputStreamReader(new FileInputStream("foo.txt"));

3 个答案:

答案 0 :(得分:8)

第一点是那些代码示例的 都没有读取文件。这可能听起来很愚蠢或不正确,但确实如此。他们实际做的是打开一个文件进行阅读。就他们实际做的而言,他们各自的效率可能没有太大差异。

当涉及到实际读取文件时,最好的使用方法取决于文件包含的内容,数据必须用于内存中算法的形式等等。这将决定它是否更好从性能角度使用Scanner或原始Reader,从使代码可靠和可维护的角度来看,更重要的是

最后,很可能这不会对代码的整体性能产生重大影响。我所说的是你过早地优化你的应用程序。您现在最好忽略性能并选择使其余代码更简单的版本。当应用程序正在运行时,请使用一些有代表性的输入数据对其进分析将告诉您读取文件所花费的时间,绝对值和相对于应用程序的其余部分。这将告诉您是否值得努力尝试优化文件读取。

我给出的唯一性能建议是从无缓冲的输入流或读取器读取字符的字符效率低下。如果需要以这种方式读取文件,则应该向堆栈添加BufferedReader。

答案 1 :(得分:3)

差异和校长,我想,使用BufferedReader / InputStreamReader,您可以根据需要逐个字符地读取整个文档。使用扫描仪,这是不可能的。这意味着使用InputStreamReader可以更好地控制文档内容。 ;)

答案 2 :(得分:3)

就性能而言,扫描仪绝对是速度较慢的,至少从我的经验来看。它用于解析,而不是读取大量数据。具有足够大缓冲区的InputStreamReader可以与BufferedReader相提并论,我记得比从Scanner读取字典列表要快几倍。 Here's a comparison between BufferedReader and InputStreamReader。请记住,BufferedReader比Scanner快几倍。