扫描仪与InputStreamReader

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

1)使用扫描仪和文件读取文件

Scanner input = new Scanner(new File("foo.txt")); 

2)使用InputStreamReader和FileInputStream读取文件

 InputStreamReader input = new InputStreamReader(new FileInputStream("foo.txt")); 

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

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

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

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

在性能方面,Scanner肯定是较慢的,至少从我的经验来看。 它用于解析,而不是读取大量数据。 具有足够大缓冲区的InputStreamReader可以与BufferedReader相提并论,我记得比从Scanner读取字典列表要快几倍。 这是BufferedReader和InputStreamReader之间的比较 。 请记住,BufferedReader比Scanner快几倍。

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