docs: protected void init(FileManager filemgr,
                          boolean auto_rehash,
                          long instanceid, // persistent object instance
                          HashtableInitInterface item_initialize, // force init of all items
                          boolean hasCacheValue,
                          HTODDynacache htoddc)
                      throws FileManagerException,
                      ClassNotFoundException,
                      IOException,
                      HashtableOnDiskException {
          this.filemgr = filemgr;
          this.filename = filemgr.filename();
          this.item_initialize = item_initialize;
          readonly = filemgr.isReadOnly();
          this.auto_rehash = auto_rehash;
          this.bHasCacheValue = hasCacheValue;
          this.htoddc = htoddc;
  
          // 
          // Open the file manager.  If this throws a FileManagerException or
          // ClassNotFoundException the file is probably not a valid file.
          // If we get an I/O exception it could be anything.
          //
  
          header = new HashHeader(filemgr, instanceid);
          if (header.magic != magic) {
              throw new HashtableOnDiskException("Invalid magic string. Expected " +
                                                 magic + " received " + header.magic);
          }
  
          currentTable = header.currentTable();
  
          threshold = (header.loadFactor * header.tablesize()) / 100; // when num_objects 
          // exceeds this we rehash
          cacheHTIndex();
          serializeTimer = new ProfTimer();
          deserializeTimer = new ProfTimer();
  
          iterationLock = new Semaphore();
  
          if (header.rehashInProgress != 0) { // recover hashtable if needed
              recover();
              cacheHTIndex(); // reread, to insure it is correct
                              // after recovery.
              iterationLock.p(); // wait for recovery to complete
              iterationLock.v();
          }
  
          if (header.num_objects() == 0) { // get updated count
              countObjects();
          }
  
          filemgr.flush();
      }