2012-02-12 63 views
5

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

感谢

回答

2

由于@EJP指出,这是很可能,你会得到比使用BufferedReader.readLine()除非你知道这是不适合足够的性能,这就是我建议你把东西简单。

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


我将内存映射整个文件,然后搜索新行获得在时间线。这避免了需要担心缓冲区大小或多次读取(或读取太多的问题)

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

+0

我不会。我会使用一个BufferedReader。除了在程序的整个生命周期中打开的大型单个文件之外,我不会使用映射的NIO,例如一个自我实现的数据库。 – EJP 2012-02-13 09:16:44

+0

@EJP,极好的一点。我应该问你是否首先需要NIO。 – 2012-02-13 10:29:39