public static long MurmurHash3_x64_64(byte[] data, int offset, int len) {
        return MurmurHash3_x64_64(BYTE_ARRAY_LOADER, data, offset, len, DEFAULT_MURMUR_SEED);
    }
@Test
    public void testMurmurHash3_x64_64() {
        final int LENGTH = 16;

        byte[] data = new byte[LENGTH];
        new Random().nextBytes(data);
        ByteBuffer dataBuffer = ByteBuffer.wrap(data);

        HashUtil.LoadStrategy<byte[]> byteArrayLoadStrategy = new HashUtil.LoadStrategy<>() {

            @Override
            public int getInt(byte[] buf, long offset) {
                return EndiannessUtil.readIntL(this, buf, offset);
            }

            @Override
            public long getLong(byte[] buf, long offset) {
                return EndiannessUtil.readLongL(this, buf, offset);
            }

            @Override
            public byte getByte(byte[] buf, long offset) {
                return buf[(int) offset];
            }

        };
        HashUtil.LoadStrategy<ByteBuffer> byteBufferLoadStrategy = new HashUtil.LoadStrategy<>() {

            @Override
            public int getInt(ByteBuffer buf, long offset) {
                return EndiannessUtil.readIntL(this, buf, offset);
            }

            @Override
            public long getLong(ByteBuffer buf, long offset) {
                return EndiannessUtil.readLongL(this, buf, offset);
            }

            @Override
            public byte getByte(ByteBuffer buf, long offset) {
                return buf.get((int) offset);
            }

        };

        long hash1 = MurmurHash3_x64_64(byteArrayLoadStrategy, data, 0, LENGTH);
        long hash2 = MurmurHash3_x64_64(byteBufferLoadStrategy, dataBuffer, 0, LENGTH);

        assertEquals(hash1, hash2);
    }