2009-11-18 45 views
4

我有一個BufferedReader循環遍歷一個文件。當我遇到特定情況時,我想繼續使用另一個閱讀器實例進行循環,但是從此開始。Java使閱讀器的副本

推薦解決方案的任何想法?創建一個單獨的閱讀器,使用標記功能等?

回答

2

在等待你對我評論的回答時,我一直在做出假設。

如果它是您所看重的行輸入,您可能會驚喜不已,因爲我發現RandomAccessFile現在(從1.4或1.5開始)支持readLine方法。當然RandomAccessFile可以讓你對位置進行細粒度的控制。

如果你想緩衝IO,你可以考慮纏繞文件包裹CharacterBuffer或者一個ByteBuffer各地讀者使用nio API映射的。這使您可以將文件視爲內存,並可以精確控制讀指針。而且由於數據全部存儲在內存中,所以緩衝是免費的。

+0

是的,就是這樣,'RandomAccessFile' :) – BalusC 2009-11-18 21:50:29

1

你看過BufferedReadermark方法嗎?與reset配合使用可能會滿足您的需求。

+0

標記很難使用,因爲我不知道傳入緩衝區的大小(或通過緩衝區我有多遠) – tinkertime 2009-11-18 21:34:57

+0

爲什麼使用BufferedReader?性能還是使用readLine()方法? – 2009-11-18 21:41:49

+0

(相對於普通的FileReader,我的意思是) – 2009-11-18 21:42:20

0

如果您記錄到目前爲止您已閱讀了多少個字符,則可以創建一個新的BufferedReader並使用skip

正如Noel指出的那樣,您需要避免使用BufferedReader.readLine(),因爲readLine()會放棄換行符並使您的字符數不準確。如果其他人永遠不得不維護你的代碼,你可能不應該指望readLine()永遠不會被調用。

如果您決定使用skip,您應該編寫自己的緩衝讀取器,它將爲您提供計算換行符的偏移量。

+1

如果避免使用BufferedReader.readLine(),它可以放棄換行數據或標準化換行符利用率,則可行。 – 2009-11-19 00:27:24