我目前使用:
BufferedReader input = new BufferedReader(new FileReader("filename"));
有更快的方法吗?
答案 0 :(得分:11)
虽然你所拥有的并不一定是绝对最快的,但它很简单。事实上,我不会使用相当那种形式 - 我会使用允许我指定字符集的东西,例如。
// Why is there no method to give this guaranteed charset
// without "risk" of exceptions? Grr.
Charset utf8 = Charset.forName("UTF-8");
BufferedReader input = new BufferedReader(
new InputStreamReader(
new FileInputStream("filename"),
utf8));
你可以使用NIO让它变得更快,但直到我看到一个实际问题我都不会。如果您发现问题,但是您正在使用对数据执行其他操作,请确保它们首先不是问题:将程序写入只是阅读文本文件。不要忘记在你的盒子上做任何事情来清除运行之间的文件系统缓存......
答案 1 :(得分:3)
如果是/快/你想要的,保持字符数据的编码形式(我不是指UTF-16)。虽然磁盘I / O通常很慢(除非它被缓存),但解码并保持两倍的数据也可能是个问题。虽然加载速度最快可能是java.nio.channels.FileChannel.map(MapMode.READ_ONLY, ...)
,但重新分配存在严重问题。
通常的警告适用。
答案 2 :(得分:1)
查看java.nio.channels.FileChannel。
答案 3 :(得分:0)
您是否对其他选项进行了基准测试?我想在某些情况下不使用BufferedReader可能会更快 - 比如极小的文件。我建议你至少做一些小基准测试,找到最适合你典型用例的实现。
答案 4 :(得分:0)
取决于您想要阅读的内容。完整的文件,或者来自特定位置,您是否需要能够通过它,或者您想要一次性阅读完整的文本?
答案 5 :(得分:0)
File file = new File("querySourceFileName");
Scanner s = new Scanner(file);
while (s.hasNext()) {
System.out.println(s.nextLine());
}