2009-07-06 102 views

回答

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

重新评论:是! – 2009-07-06 21:38:34

+1

你怎么可以实例化InputStream? – 2009-08-07 13:12:07

1

调查java.nio.channels.FileChannel。

0

你有没有基准你的其他选项?我想在某些情况下不使用BufferedReader可能会更快 - 例如极小的文件。我会建议你至少做一些小的基准测试,并找到适合你典型用例的最快实现。

0

取决于你想要阅读的内容。完整的文件或特定的位置,您是否需要通过它进行分隔,或者您是否想一次读完整个文本?

3

如果它是/ fast /你想要的,保持字符数据的编码形式(我不是指UTF-16)。虽然磁盘I/O通常很慢(除非它被缓存),但解码和保存两倍数据也是一个问题。虽然加载速度最快的可能是通过java.nio.channels.FileChannel.map(MapMode.READ_ONLY, ...),但这在解除分配方面存在严重问题。

通常的注意事项适用。

0
File file = new File("querySourceFileName"); 
Scanner s = new Scanner(file); 
while (s.hasNext()) { 
    System.out.println(s.nextLine()); 
}