编程语言
首页 > 编程语言> > Java有效读取大文件(〜100GB)

Java有效读取大文件(〜100GB)

作者:互联网

我想用Java有效地读取一个巨大的二进制文件(〜100GB).我必须处理它的每一行.行处理将在单独的线程中进行.我不想将整个文件加载到内存中.分块阅读有效吗?最佳缓冲区大小是多少?有什么公式吗?

解决方法:

如果这是一个二进制文件,则以“行”读取没有太大意义.

如果文件确实是二进制文件,则使用BufferedInputStream并一次将一个字节读取到byte []中.当到达标记“行”结尾的字节时,将byte []和行中的字节数添加到队列中,以供工作线程处理.

重复一遍.

提示:

>使用有限缓冲区,以防读取行比处理行更快.
>回收byte []对象以减少垃圾的产生.

如果文件是(真正的)文本,则可以使用BufferedReader和readLine()方法,而不是调用read().

以上将为您提供合理的性能.根据处理每一行需要完成的工作量,可能没有必要优化文件读取就足够了.您可以通过分析来检查.

如果分析告诉您读取是瓶颈,那么可以考虑将NIO与ByteBuffer或CharBuffer一起使用.它比read()或readLine()更复杂,但可能更快.

Does reading in chunks work?

BufferedReader或BufferedInputStream都在后台秘密读取.

What will be the optimum buffer size?

缓冲区的大小可能并不那么重要.我将其设置为几KB或几十KB.

Any formula for that?

没有最佳缓冲大小的公式.这将取决于您无法量化的变量.

标签:io,file-io,binaryfiles,java
来源: https://codeday.me/bug/20191112/2023741.html