java nio 从文件中读取行

标签 java performance io nio

我如何在 java nio 中实现一个函数,比如 nextLineNio(),它从 FileChannel 增量读取下一行,因为文件可能很大,我最初的想法是读入一个大小大于一行的最大长度的 ByteBuffer如果需要,存在并从 FileChannel 读取(),但我看到的问题是如何取消读取不以换行符结尾的最后一个字节序列。另外我如何确保 nextLineNio() 函数不会失败,因为 nio api 是异步的。任何帮助或已经存在的实现?

谢谢

最佳答案

正如@EJP 指出的那样,使用 BufferedReader.readLine() 很可能会获得足够的性能,除非您知道这不合适,否则我建议您保持简单。

http://vanillajava.blogspot.com/2011/01/how-slow-can-you-readwrite-files-in.html


我会内存映射整个文件并搜索换行符以一次获取一行。这避免了需要担心缓冲区大小或多次读取(或读取过多的问题)

NIO 默认是同步的,文件 IO 只是同步的(直到 Java 7)。要使套接字异步,您必须调用一个特殊的 setter 。

关于java nio 从文件中读取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252112/

相关文章:

Java Scanner 不等待用户输入

Java 与 Python 内存效率

android - 滚动时具有 Horizo​​ntalScrollview 的 ScrollView 滞后

java - "Variable might not have been initialized"是什么意思?

performance - Parallela FPGA-与 GPU 和昂贵的 FPGA 相比,64 核的性能如何?

windows - 如何使用 Perl 快速修复大文件中的 EBCDIC 控制字符?

c++ - 将 FILE * 转换为 CMemFile(或从 FILE * 检索 void*)

java - 从多个线程可靠地写入一个 PrintWriter

java - 如何将 spring 中的@Lob 数据保存到 Postgres 数据库中?

java - java.awt.Desktop 的问题