2011-11-07 25 views
3

使用新的I/O從文件讀取行的最佳方式是什麼?使用Java的新讀取行新的I/O

我一次只能得到一個字節。

有什麼想法?

+6

你嘗試過什麼嗎?什麼工作?什麼沒有? – Piskvor

+1

定義「最佳」......最快,最容易理解/維護,便攜,強大,響應......? – Bohemian

回答

2

BufferedReader的readline()方法應該足夠了。否則,你必須讀取任意數量的字節並解析結束符'\ n'或\ r \ n',如果它在windows風格行結尾

+0

感謝您的回答。正是我想知道的。 –

1

是指Java 5.0中引入的NIO,7年前?或者在Java 7中添加異步NIO?

總之,簡單的答案是使用BufferedReader要簡單得多,速度並不慢。

如果您必須使用ByteBuffer,或者您想要最後一點的性能,則必須一次讀取一個字節。 (你有處理,只有部分線路已被讀取,所以你可以在字節緩衝區到達新行之前用完數據的情況)

+0

有趣的你的答案。我對「BufferedReader」的性能表示懷疑。在這種情況下,我不需要解析。 –

+0

如果您必須從文件中讀取文本,您可以獲得NIO可達到的最高性能的25%(沒有複雜性)。在任何情況下,如果您有HDD,則更有可能受硬件限制。 (使用SSD可以產生很小的差異) –

4

或者對於小文件,你可以這樣做:

List<String> smallFilesLines = Files.readAllLines( 
FileSystems.getDefault().getPath("smallFile.txt"), StandardCharsets.UTF_8); 

for (String oneLine : smallFilesLines) { 
    System.out.println(oneLine); 
}