JDBM中提供了一個接口RecordManager,用于對記錄進行操作:

  public abstract long insert( Object obj )
        throws IOException;

   
    /**
     *  Inserts a new record using a custom serializer.
     */
    public abstract long insert( Object obj, Serializer serializer )
        throws IOException;

    /**
     *  Deletes a record.
     */
    public abstract void delete( long recid )
        throws IOException;


    /**
     *  Updates a record using standard java object serialization.
     */
    public abstract void update( long recid, Object obj )
        throws IOException;


    /**
     *  Updates a record using a custom serializer.
     */
    public abstract void update( long recid, Object obj, Serializer serializer )
        throws IOException;

   
    /**
     *  Fetches a record using standard java object serialization.
     */
    public abstract Object fetch( long recid )
        throws IOException;


    /**
     *  Fetches a record using a custom serializer.
     */
    public abstract Object fetch( long recid, Serializer serializer )
        throws IOException;


    /**
     *  Closes the record manager.
     */
    public abstract void close()
        throws IOException;


具體的實現類一共兩個:BaseRecordManager和CacheRecordManager,后者是前者的Cache。BaseRecordManager用于將緩存對象序列化到文件系統中,即緩存對象管理主要是文件讀取方面的操作,而CacheRecordManager
對讀取的文件進行了緩存,較少IO的次數提高效率。

BaseRecordManager

BaseRecordManager有四個主要的變量

    /**
     * Underlying record file.
     */
    private RecordFile _file;
    /**
     * Physical row identifier manager.
     */
    private PhysicalRowIdManager _physMgr;
    /**
     * Logigal to Physical row identifier manager.
     */
    private LogicalRowIdManager _logMgr;
    /**
     * Page manager.
     */
    private PageManager _pageman;


沒有看其實現代碼,但是從其構造函數可以看出一些端倪:
    public BaseRecordManager( String filename )
        throws IOException
    {
        _file = new RecordFile( filename );
        _pageman = new PageManager( _file );
        _physMgr = new PhysicalRowIdManager( _file, _pageman );
        _logMgr = new LogicalRowIdManager( _file, _pageman );
    }
jdbm.recman主要都是關于Page,PhysicalRow和LogicalRow這些相關類。