我有一個BufferedReader循環遍歷一個文件。當我遇到特定情況時,我想繼續使用另一個閱讀器實例進行循環,但是從此開始。Java使閱讀器的副本
推薦解決方案的任何想法?創建一個單獨的閱讀器,使用標記功能等?
我有一個BufferedReader循環遍歷一個文件。當我遇到特定情況時,我想繼續使用另一個閱讀器實例進行循環,但是從此開始。Java使閱讀器的副本
推薦解決方案的任何想法?創建一個單獨的閱讀器,使用標記功能等?
在等待你對我評論的回答時,我一直在做出假設。
如果它是您所看重的行輸入,您可能會驚喜不已,因爲我發現RandomAccessFile
現在(從1.4或1.5開始)支持readLine
方法。當然RandomAccessFile可以讓你對位置進行細粒度的控制。
如果你想緩衝IO,你可以考慮纏繞文件包裹CharacterBuffer
或者一個ByteBuffer
各地讀者使用nio
API映射的。這使您可以將文件視爲內存,並可以精確控制讀指針。而且由於數據全部存儲在內存中,所以緩衝是免費的。
標記很難使用,因爲我不知道傳入緩衝區的大小(或通過緩衝區我有多遠) – tinkertime 2009-11-18 21:34:57
爲什麼使用BufferedReader?性能還是使用readLine()方法? – 2009-11-18 21:41:49
(相對於普通的FileReader,我的意思是) – 2009-11-18 21:42:20
如果您記錄到目前爲止您已閱讀了多少個字符,則可以創建一個新的BufferedReader並使用skip。
正如Noel指出的那樣,您需要避免使用BufferedReader.readLine()
,因爲readLine()
會放棄換行符並使您的字符數不準確。如果其他人永遠不得不維護你的代碼,你可能不應該指望readLine()永遠不會被調用。
如果您決定使用skip
,您應該編寫自己的緩衝讀取器,它將爲您提供計算換行符的偏移量。
如果避免使用BufferedReader.readLine(),它可以放棄換行數據或標準化換行符利用率,則可行。 – 2009-11-19 00:27:24
是的,就是這樣,'RandomAccessFile' :) – BalusC 2009-11-18 21:50:29