protected static long getblock(ByteBuffer key, int offset, int index) {
    int i_8 = index << 3;
    int blockOffset = offset + i_8;
    return ((long) key.get(blockOffset + 0) & 0xff) + (((long) key.get(blockOffset + 1) & 0xff) << 8) + (
        ((long) key.get(blockOffset + 2) & 0xff) << 16) + (((long) key.get(blockOffset + 3) & 0xff) << 24) + (
        ((long) key.get(blockOffset + 4) & 0xff) << 32) + (((long) key.get(blockOffset + 5) & 0xff) << 40) + (
        ((long) key.get(blockOffset + 6) & 0xff) << 48) + (((long) key.get(blockOffset + 7) & 0xff) << 56);
  }
This is a very fast, non-cryptographic hash suitable for general hash-based
lookup. See http://murmurhash.googlepages.com/ for more details.

hash32() and hash64() are MurmurHash 2.0.
hash3_x64_128() is MurmurHash 3.0.

<p>
The C version of MurmurHash 2.0 found at that site was ported to Java by
Andrzej Bialecki (ab at getopt org).
</p>
ambry-utils/src/main/java/com/github/ambry/utils/MurmurHash.java