网上流传的继承RandomAccessFile缓冲办法并不可靠

  最近一段时间,试图对RandomAccessFile进行缓冲,期间出了不少问题。最早吾是从网上搜索,看看有没有现成的代码。找到了现在的代码,用了一下都出错了。

  出错了怎么办?自己写。自己写,就先研究了一下RandomAccessFile,然后就认定,使用继承一定是不行的。为什么呢?看以下代码:

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

  final表示本函数无法重载。如果从RandomAccessFile继承,一旦调用这个函数,那么缓冲关系就错乱了,结果就会一团糟。

  怎么解决这个问题?

  • 另外提供一个函数,并明确要求不得调用seek()之类的函数。这个最好使用工具检查。
  • 封闭,保存一个RandomAccessFile引用。这样实现同名函数,然后调用RandomAccessFile的对应函数。
  • 修改JDK,去掉final,允许继承。

  目前看,第一种方式最佳,最简单。

猜你喜欢

转载自blog.csdn.net/quantum7/article/details/107603817