2012-02-12 69 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