private boolean loadIndex(long dataIndexVersion) throws IOException {
   mIndexPos = 0;
   mIndexedSequenceFileNumber = -1;
   mIndex =
       DataFileIndex.loadDataFileIndex(
           dataIndexVersion, new File(mDir, mIndexFile), mDataFilePrefix);
   if (mIndex.getTotalNumberSequences() != mNumberSequences) {
     throw new CorruptSdfException(mDir);
   }
   return true;
 }
 /**
  * Alternative to other one with similar name
  *
  * @param directory directory containing SDF
  * @param indexFile index file
  * @param loadNames should we load names
  * @param loadFullNames should we load full names
  * @param region region to restrict to
  * @throws IOException IO exception occurs
  */
 CompressedMemorySequencesReader2(
     File directory,
     IndexFile indexFile,
     boolean loadNames,
     boolean loadFullNames,
     LongRange region)
     throws IOException {
   mIndexFile = indexFile;
   mRegion = SequencesReaderFactory.resolveRange(indexFile, region);
   mStart = mRegion.getStart();
   mEnd = mRegion.getEnd();
   mNumberSequences = mEnd - mStart;
   mData =
       DataInMemory.loadDelayQuality(
           directory,
           indexFile,
           DataFileIndex.loadSequenceDataFileIndex(indexFile.dataIndexVersion(), directory),
           mStart,
           mEnd);
   if (mNumberSequences > Integer.MAX_VALUE) {
     throw new IllegalArgumentException(
         "Too many sequences in region: " + region + ", maximum is: " + Integer.MAX_VALUE);
   }
   mDirectory = directory;
   if (loadNames && mIndexFile.hasNames()) {
     loadNames();
     loadNameSuffixes(loadFullNames, mIndexFile.hasSequenceNameSuffixes());
   }
   final StringBuilder sb = new StringBuilder("CMSR2 statistics");
   sb.append(LS);
   this.infoString(sb);
   Diagnostic.userLog(sb.toString());
 }
 protected void loadNext() {
   final long value;
   value = mIndex.numberSequences(mIndexPos++);
   mIndexedSequenceFileNumber++;
   mCurrentLower = mCurrentUpper;
   mCurrentUpper += value;
 }
 /**
  * Creates a the stream manager
  *
  * @param dir Directory containing sequence data
  * @param numbersequences Number of sequences in directory
  * @param indexFile Name of file containing index
  * @param dataPrefix Filename prefix for data
  * @param pointerPrefix Filename prefix for pointers
  * @param dataIndexVersion the version with which to interpret the data
  * @param opener file opener implementation
  * @throws IOException If an I/O Error occurs
  */
 AbstractStreamManager(
     final File dir,
     final long numbersequences,
     final String indexFile,
     final String dataPrefix,
     final String pointerPrefix,
     long dataIndexVersion,
     DataFileOpener opener)
     throws IOException {
   mDir = dir;
   mNumberSequences = numbersequences;
   mIndexFile = indexFile;
   mDataFilePrefix = dataPrefix;
   loadIndex(dataIndexVersion);
   mData = new DataRollingFile(mDir, dataPrefix, mIndex.numberEntries(), mIndex, opener);
   mPointers = new RollingFile(mDir, pointerPrefix, mIndex.numberEntries());
 }
 @Override
 SeekableStream openFileInternal(File f, int fileNum) throws IOException {
   return mOpener.openRandomAccess(f, mDataIndex.dataSize(fileNum));
 }