code: public synchronized void seek(long pos) throws IOException {
      if( pos<0 ) {
        return;
      }
      // optimize: check if the pos is in the buffer
      long start = chunkPos - this.count;
      if( pos>=start && pos<chunkPos) {
        this.pos = (int)(pos-start);
        return;
      }
      
      // reset the current state
      resetState();
      
      // seek to a checksum boundary
      chunkPos = getChunkPosition(pos);
      
      // scan to the desired position
      int delta = (int)(pos - chunkPos);
      if( delta > 0) {
        readFully(this, new byte[delta], 0, delta);
      }
    }
docs: Seek to the given position in the stream.
  The next read() will be from that position.
  
  <p>This method may seek past the end of the file.
  This produces no exception and an attempt to read from
  the stream will result in -1 indicating the end of the file.
  
  @param      pos   the postion to seek to.
  @exception  IOException  if an I/O error occurs.
  ChecksumException if the chunk to seek to is corrupted