public static ByteBufferReader of(ByteBuffer byteBuffer, int readBase, Closeable close) throws IOException {
        return new ByteBufferReader() {
            @Override
            public void read(long position, ByteBuffer dst) throws IOException {
                IOUtil.readFully(byteBuffer, (int) (readBase + position), dst, dst.remaining());
            }

            @Override
            public void read(long position, byte[] buffer, int offset, int length) {
                byteBuffer.position((int) position);
                byteBuffer.get(buffer, offset, length);
            }

            @Override
            public boolean exists(long position) throws IOException {
                return position >= 0 && readBase + position < byteBuffer.limit();
            }

            @Override
            public void close() throws IOException {
                if (close != null) {
                    close.close();
                }
            }
        };
    }
Wrap a ByteBufferReader into an {@link Opener}.
Note that the close will <b>not</b> passed to the opener,
indexr-common/src/main/java/io/indexr/io/ByteBufferReader.java