我想读取一个关于几个gbs的大文本文件,并在不加载整个文件的情况下对其进行处理,但要加载其中的大块文件
如果我使用并发哈希Map来并行处理文件以提高效率,有没有一种方法可以使用nio或random access文件来分块读取它?它会使它更有效率吗?
当前的实现是使用一个缓冲读取器,如下所示:
while(lines.size() <= numberOfLines && (line = bufferedReader.readLine()) != null) {
lines.add(line);
}
lines.parallelStream().. // processing logic using ConcurrentHashMap
2条答案
按热度按时间p3rjfoxz1#
显而易见的java 7解决方案是:
老实说,我不知道它是否更快,但我在引擎盖下,它不读取到缓冲区,所以至少在理论上它应该更快
kfgdxczn2#
RandomAccessFile
只有当你打算在文件中“跳转”并且你对你正在做的事情的描述听起来不是那样的时候才有意义。如果您必须处理大量并行通信,并且希望执行非阻塞操作(例如在套接字上),那么nio是有意义的。这似乎也不是你的用例。因此,我的建议是坚持在inputstreamreader(fileinputstream)之上使用bufferedreader的简单方法(不要使用filereader,因为这不允许您指定要使用的字符集/编码),并按照示例代码中显示的方式遍历数据。不要使用parallelstream,只有当您看到糟糕的性能时,才可以尝试使用它。
永远记住:过早优化是万恶之源。