在Scala中,为了读取文本文件并将其上传到数组中,常见的方法是
scala.io.Source.fromFile("file.txt").getLines.toArray
Run Code Online (Sandbox Code Playgroud)
特别是对于非常大的文件,是否有更快的方法可能首先将字节块读入内存然后用新行字符拆分它们?(有关常用方法,请参阅Scala中的读取整个文件.)
非常感谢.
对于日志处理,我的应用程序需要逐行读取文本文件.首先我使用了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();
}
Run Code Online (Sandbox Code Playgroud)
我知道这可能不是实现它的好方法,但是当我以字节为单位读取文本文件时,它比使用BufferedReader快3倍,但是调用new String(bytes)会创建一个新的String并使程序在使用BufferedReader时更慢.
所以我想问一下逐行读取文本文件的最快方法是什么?有人说BufferedReader是解决这个问题的唯一方法.
PS:ra是dk.brics.Automaton库中RunAutomaton的一个实例.