我如何在java中实现一个函数nio说nextLineNio()会逐渐从FileChannel读取下一行,因为文件可能很大,我最初的想法是读入一个大小大于行的最大长度的ByteBuffer如果需要,从FileChannel存在和read(),但我看到的问题是如何取消读取不以换行结尾的最后一个字节序列。另外,我如何确保nextLineNio()函数不会失败,因为nio api是异步的。任何帮助或已经存在的实现?
由于
答案 0 :(得分:2)
正如@EJP所指出的,使用BufferedReader.readLine()你很可能获得足够的性能。除非你知道这不合适,否则我建议你保持简单。
http://vanillajava.blogspot.com/2011/01/how-slow-can-you-readwrite-files-in.html
我会记住整个文件的内存并搜索换行符以一次获取一行。这样就不必担心缓冲区大小或多次读取(或读取太多的问题)
默认情况下,NIO是同步,文件IO只是同步的(直到Java 7)。要使套接字异步,您必须调用一个特殊的setter。