从Java中读取文本文件的最快方法是什么?

时间:2009-07-06 21:23:33

标签: java file-io

我目前使用:

BufferedReader input = new BufferedReader(new FileReader("filename"));

有更快的方法吗?

6 个答案:

答案 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());
}