有谁知道发生是否存在与阅读下述输入文件的两种方法之间的性能有关的有什么区别? 谢谢。
1)阅读与扫描仪和文件的文件
Scanner input = new Scanner(new File("foo.txt"));
2)读取与InputStreamReader和的FileInputStream一个文件
InputStreamReader input = new InputStreamReader(new FileInputStream("foo.txt"));
有谁知道发生是否存在与阅读下述输入文件的两种方法之间的性能有关的有什么区别? 谢谢。
1)阅读与扫描仪和文件的文件
Scanner input = new Scanner(new File("foo.txt"));
2)读取与InputStreamReader和的FileInputStream一个文件
InputStreamReader input = new InputStreamReader(new FileInputStream("foo.txt"));
第一点是, 无论那些码样本读取的文件。 这听起来愚蠢或不正确的,但它是真实的。 他们实际上做的是打开一个文件进行读取。 而在实际上他们做的方面,有可能不是在各自的效率的巨大差异。
当涉及到实际读取文件,最好的方法使用将取决于哪些文件包含,何种形式的数据必须是在你的内存算法等,这将决定它是否是更好地使用Scanner
或原始Reader
,从性能的角度来看, 更重要的使你的代码,可靠和易于维护的角度。
最后,有机会,这不会对你的代码的整体性能有显著差异。 我想说的是,你过早地优化应用程序。 您现在忽视了性能和选择的版本,这将使你的代码的其余部分更简单更好。 当应用程序的工作,与一些有代表性的输入数据的轮廓吧。 剖析会告诉你的时间都花在阅读文件,按绝对值计算,并相对于应用程序的其余部分。 这会告诉你是否值得努力尝试优化文件读取。
性能建议我给唯一的一点是无缓冲输入流是逐个字符阅读器或阅读器是低效的。 如果文件需要被读取的方式,你应该一个BufferedReader添加到堆栈中。
的差异,和校长,我想,是与的BufferedReader / InputStreamReader中,你可以通过阅读文字在整个文档的字符,如果你想要的。 随着扫描仪,这是没有可能的。 这意味着,与使用InputStreamReader你可以对文件的内容更多的控制。 ;)
在性能方面,扫描仪绝对是一个比较慢,至少从我的经验。 它是由用于解析,不读巨大的数据块。 InputStreamReader中,有一个足够大的缓冲区,可以看齐的BufferedReader,我记得是比扫描仪快几十倍从字典列表读取执行。 这里的的BufferedReader的InputStreamReader和之间的比较 。 记住的BufferedReader比扫描仪快几十倍。