code: public void seek(int recordIndex) throws IOException {
  		if (!this.stream.markSupported()) {
  			throw new UnsupportedSeekOperationException();
  		}
  		if (this.recordCount == -1) {
  			throw new MustCallReadHeaderFunctionException();
  		}
  		int ri = recordIndex;
  		if (ri < 0) {
  			ri = 0;
  		}
  		if (ri >= this.recordCount) {
  			throw new EOFException();
  		}
  
  		this.readingPosition = ri;
  		// Goto the first record
  		this.stream.reset();
  		// Skip until the next record to read
  		if (ri > 0) {
  			// use skipBytes because it force to skip the specified amount, instead of skip()
  			this.stream.skipBytes(this.recordSize * ri);
  		}
  	}
docs: Move the reading head at the specified record index.
  
  <p>If the index is negative, the next record to read is assumed to be
  the first record.
  If the index is greater or equals to the count of records, the exception
  {@link EOFException} will be thrown.
  
  @param recordIndex is the index of record to reply at the next read.
  @throws IOException in case of error.