【发布时间】:2011-08-13 14:37:29
【问题描述】:
对于日志处理,我的应用程序需要逐行读取文本文件。
首先我使用了 BufferedReader 的 readLine() 函数,但我在网上看到 BufferedReader 在读取文件时速度很慢。
之后我尝试将 FileInputStream 与 FileChannel 和 MappedByteBuffer 一起使用,但在这种情况下,没有类似于 readLine() 的函数,所以我在文本中搜索换行符并进行处理:
try {
FileInputStream f = new FileInputStream(file);
FileChannel ch = f.getChannel( );
MappedByteBuffer mb = ch.map(FileChannel.MapMode.READ_ONLY, 0L, ch.size());
byte[] bytes = new byte[1024];
int i = 0;
while (mb.hasRemaining()) {
byte get = mb.get();
if(get == '\n') {
if(ra.run(new String(bytes)))
cnt++;
for(int j = 0; j<=i; j++)
bytes[j] = 0;
i = 0;
}
else
bytes[i++] = get;
}
} catch(Exception ex) {
ex.printStackTrace();
}
我知道这可能不是实现它的好方法,但是当我以字节为单位读取文本文件时,它比使用 BufferedReader 快 3 倍,但调用 new String(bytes) 创建一个新字符串并使程序变得更慢使用 BufferedReader 时。
所以我想问一下逐行读取文本文件的最快方法是什么?有人说 BufferedReader 是解决这个问题的唯一方法。
P.S.:ra 是 dk.brics.Automaton 库中 RunAutomaton 的一个实例。
【问题讨论】:
-
BufferedReader 真的太慢了,无法满足您的需求吗?如果您必须使用 Java 编码,它可能是最简洁、最可维护的解决方案之一。
-
如果
BufferedReader对你的应用程序来说真的太慢了,你应该考虑不使用java或其他托管语言...... (但我怀疑是这种情况)
标签: java file-io readline text-files