java nio从文件中读取行

时间:2012-02-12 19:50:45

标签: java performance io nio

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

由于

1 个答案:

答案 0 :(得分:2)

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

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


我会记住整个文件的内存并搜索换行符以一次获取一行。这样就不必担心缓冲区大小或多次读取(或读取太多的问题)

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