使用NIO与RandomAccessFile读取文件块

时间:2017-09-04 18:11:01

标签: java nio randomaccessfile

我想阅读一个关于几个GB的大文本文件并处理它而不加载整个文件但是加载它的块。(处理涉及计算字实例)

如果我使用并发哈希映射并行处理文件以提高效率,是否有办法使用NIO或随机访问文件以块的形式读取它?会不会让它变得更有效率?

目前的实现是使用缓冲读取器,如下所示:

while(lines.size() <= numberOfLines && (line = bufferedReader.readLine()) != null) {
     lines.add(line);
}

lines.parallelStream().. // processing logic using ConcurrentHashMap

2 个答案:

答案 0 :(得分:1)

RandomAccessFile只有在你打算跳过&#34;才有意义。在文件中,您对自己所做的事情的描述听起来并非如此。如果您必须处理大量并行通信并且您想要进行非阻塞操作,NIO是有意义的,例如在套接字上。这似乎也不是你的用例。

所以我的建议是坚持在InputStreamReader(FileInputStream)之上使用BufferedReader的简单方法(不要使用FileReader,因为它不允许你指定charset / encoding为使用过)并浏览示例代码中显示的数据。只要你看到糟糕的性能,你就可以尝试使用parallelStream。

永远记住:过早优化是万恶之源。

答案 1 :(得分:-1)

显而易见的java 7解决方案是:

 String lines = Files.readAllLines(Paths.get("file"), StandardCharsets.UTF_8).reduce((a,b)->a+b);  

老实说我不知道​​如果速度更快但是我觉得它不会把它读入缓冲区,所以至少在理论上它应该更快