天天看點

網上流傳的繼承RandomAccessFile緩沖辦法并不可靠

  最近一段時間,試圖對RandomAccessFile進行緩沖,期間出了不少問題。最早吾是從網上搜尋,看看有沒有現成的代碼。找到了現在的代碼,用了一下都出錯了。

  出錯了怎麼辦?自己寫。自己寫,就先研究了一下RandomAccessFile,然後就認定,使用繼承一定是不行的。為什麼呢?看以下代碼:

public native long length() throws IOException;
    public native void setLength(long newLength) throws IOException;
           

  final表示本函數無法重載。如果從RandomAccessFile繼承,一旦調用這個函數,那麼緩沖關系就錯亂了,結果就會一團糟。

  • 另外提供一個函數,并明确要求不得調用seek()之類的函數。這個最好使用工具檢查。
  • 封閉,儲存一個RandomAccessFile引用。這樣實作同名函數,然後調用RandomAccessFile的對應函數。
  • 修改JDK,去掉final,允許繼承。

繼續閱讀