Directory抽象类及其子类的总结 (6)

public Object clone() {
      FSIndexInput clone = (FSIndexInput)super.clone();
      clone.isClone = true;
      return clone;
    }

/** Method used for testing. Returns true if the underlying
     * file descriptor is valid.
     */
    boolean isFDValid() throws IOException {
      return file.getFD().valid();
    }
}

// FSIndexOutput是一个静态内部类,用于管理文件系统中的索引文件输出流,与FSIndexInput实现类似

protected static class FSIndexOutput extends BufferedIndexOutput {
    RandomAccessFile file = null;
  
    // 用于记录文件打开状态的boolean型变量isOpen   
    private boolean isOpen;

public FSIndexOutput(File path) throws IOException {
      file = new RandomAccessFile(path, "rw");
      isOpen = true;
    }
  
   // 从缓冲区写入文件的方法
    public void flushBuffer(byte[] b, int offset, int size) throws IOException {
      file.write(b, offset, size);
    }
    public void close() throws IOException {
      if (isOpen) {
        super.close();
        file.close();
        isOpen = false;
      }
    }

// 随机访问的方法实现
    public void seek(long pos) throws IOException {
      super.seek(pos);
      file.seek(pos);
    }
    public long length() throws IOException {
      return file.length();
    }

}
}

上面FSDirectory类的实现挺复杂的,主要是在继承Directory抽象类的基础上,增加了文件系统目录锁特有的一些操作方式。

通过FSDirectory类源代码的阅读,关于文件系统目录FSDirectory类,总结几点:

1、锁工厂的获取及其管理;

2、对文件系统目录下索引文件的输入流和输出流的管理;

3、获取FSDirectory类实例;

4、获取锁工厂实例后,可以创建一个新的FSDirectory类实例,在此之前先要完成一些初始化工作;

5、继承自Directory抽象类,自然可以实现索引文件的的拷贝操作。

6、FSDirectory类中实现了很多静态内部类,这使得只能在FSDirectory类内部访问这些静态类,对外部透明。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjsjs.html