有没有人碰巧知道下面两种读取输入文件的方法在性能方面是否存在差异? 谢谢。
1)用Scanner和File读取文件
Scanner input = new Scanner(new File("foo.txt"));
2) 使用 InputStreamReader 和 FileInputStream 读取文件
InputStreamReader input = new InputStreamReader(new FileInputStream("foo.txt"));
最佳答案
第一点是这些代码示例都没有读取文件。这听起来可能很愚蠢或不正确,但这是事实。他们实际上做的是打开一个文件进行阅读。就他们实际做的事情而言,他们各自的效率可能没有太大差异。
当谈到实际读取文件时,最佳使用方法将取决于文件包含的内容、数据必须以何种形式用于内存算法等。这将决定是否更好使用 Scanner
或原始 Reader
,从性能角度和更重要的是使您的代码可靠和可维护的角度。
最后,这很可能不会对代码的整体性能产生重大影响。我的意思是您正在过早地优化您的应用程序。您最好暂时忽略性能并选择可以简化其余代码的版本。当应用程序运行时,使用一些有代表性的输入数据对其进行分析。分析会以绝对值和相对于应用程序其余部分的形式告诉您读取文件所花费的时间。这将告诉您尝试优化文件读取是否值得努力。
我要给出的唯一性能建议是,从无缓冲输入流或读取器逐个字符地读取是低效的。如果需要以这种方式读取文件,则应将 BufferedReader 添加到堆栈中。
关于java - 扫描仪与 InputStreamReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067465/