@Override public int readInt(long pos) { long absPos = offset + pos; int blockOffset = blockOffset(absPos); if (blockOffset + Integer.BYTES <= blockMask) { return blocks[blockIndex(absPos)].getInt(blockOffset); } else { return ((readByte(pos ) ) << 24 | (readByte(pos + 1) & 0xFF) << 16 | (readByte(pos + 2) & 0xFF) << 8 | (readByte(pos + 3) & 0xFF)); } }
@Override public byte readByte(long pos) throws IOException { ensureOpen(); return in.readByte(pos); }
@Override public short readShort(long pos) { long absPos = offset + pos; int blockOffset = blockOffset(absPos); if (blockOffset + Short.BYTES <= blockMask) { return blocks[blockIndex(absPos)].getShort(blockOffset); } else { return (short) ((readByte(pos ) & 0xFF) << 8 | (readByte(pos + 1) & 0xFF)); } }
@Override public byte readByte() throws IOException { ensureOpen(); return in.readByte(); }
@Override public int readInt(long pos) { long absPos = offset + pos; int blockOffset = blockOffset(absPos); if (blockOffset + Integer.BYTES <= blockMask) { return blocks[blockIndex(absPos)].getInt(blockOffset); } else { return ((readByte(pos ) ) << 24 | (readByte(pos + 1) & 0xFF) << 16 | (readByte(pos + 2) & 0xFF) << 8 | (readByte(pos + 3) & 0xFF)); } }
@Override public byte readByte() throws IOException { ensureOpen(); return in.readByte(); }
@Override public short readShort(long pos) { long absPos = offset + pos; int blockOffset = blockOffset(absPos); if (blockOffset + Short.BYTES <= blockMask) { return blocks[blockIndex(absPos)].getShort(blockOffset); } else { return (short) ((readByte(pos ) & 0xFF) << 8 | (readByte(pos + 1) & 0xFF)); } }
@Override public byte readByte(long pos) throws IOException { ensureOpen(); return in.readByte(pos); }