最近一段時間,試圖對RandomAccessFile進行緩沖,期間出了不少問題。最早吾是從網上搜尋,看看有沒有現成的代碼。找到了現在的代碼,用了一下都出錯了。
出錯了怎麼辦?自己寫。自己寫,就先研究了一下RandomAccessFile,然後就認定,使用繼承一定是不行的。為什麼呢?看以下代碼:
public native long length() throws IOException;
public native void setLength(long newLength) throws IOException;
final表示本函數無法重載。如果從RandomAccessFile繼承,一旦調用這個函數,那麼緩沖關系就錯亂了,結果就會一團糟。
- 另外提供一個函數,并明确要求不得調用seek()之類的函數。這個最好使用工具檢查。
- 封閉,儲存一個RandomAccessFile引用。這樣實作同名函數,然後調用RandomAccessFile的對應函數。
- 修改JDK,去掉final,允許繼承。