public final void _unpack(byte[] in, int[] out) {
        int valCount = out.length;

        int step = valCount >>> 3;
        for (int s = 0; s < step; s++) {
            //int valIndex = s << 3;
            unpack8Values(in, s * bitWidth, out, s << 3);
        }

        int tail = valCount & 0x07;
        if (tail != 0) {
            int tailStart = (valCount >>> 3) << 3;
            int[] tailData = new int[8];
            unpack8Values(in, (valCount >>> 3) * bitWidth, tailData, 0);
            for (int i = 0; i < valCount - tailStart; i++) {
                out[tailStart + i] = tailData[i];
            }
        }
    }
unpack bitWidth bytes from input into 8 values in output.
nextPosition: input = (inAddr + bitWidth), output = (outAddr + 8 * 4)
indexr-vlt-segment/src/main/java/io/indexr/vlt/codec/pack/IntPacker.java