@Override
    public void seek(final long pos) throws IOException {
        final long newPosition = Math.min(pos, dataLength);
        final long offset = newPosition - position;
        // If +ve then we can skip.
        if (offset > 0) {
            skip(offset);
        }
        // Going back
        if (offset < 0) {
            // Force a reload

            // Then figure out block and offset
            final long blockNumber = newPosition / blockSize;
            final long blockOffset = newPosition % blockSize;

            // Read our index
            raFile.position(idxStart + BlockGZIPConstants.LONG_BYTES + (blockNumber * BlockGZIPConstants.LONG_BYTES));
            currentRawStreamBuffer = createBufferedInputStream(true);
            final long seekPos = readLong();
            raFile.position(seekPos);
            currentRawStreamBuffer = createBufferedInputStream(true);
            startGzipBlock();
            currentStream.skip(blockOffset);

            position = newPosition;
        }
    }
Seek to a position in this stream.
stroom-data/stroom-data-store-impl-fs/src/main/java/stroom/data/store/impl/fs/BlockGZIPInputFile.java