@Override public InputStream readAt(final int offset) { mBuffer.position(offset); return new InputStream() { private int mPos = offset; @Override public int read() throws IOException { mBuffer.position(mPos); if (!mBuffer.isPositionHasData()) { return -1; } mPos++; return mBuffer.get() & 0xff; } @Override public int read(byte[] bytes, int off, int len) throws IOException { mBuffer.position(mPos); if (mBuffer.remaining() == 0 || !mBuffer.isPositionHasData()) { return -1; } len = Math.min(len, mBuffer.remaining()); mPos += len; mBuffer.get(bytes, off, len); return len; } }; }