Kafka中基于byte[]的murmur2 哈希算法实现

来源:互联网 发布:maven 设置java home 编辑:程序博客网 时间:2024/06/06 16:02

        无需赘言,直接上代码:

    /**     * Generates 32 bit murmur2 hash from byte array     * 根据一个byte数组产生一个32位的murmur2 hash值     *      * @param data byte array to hash     * @return 32 bit hash of the given array     */    public static int murmur2(final byte[] data) {        int length = data.length;        int seed = 0x9747b28c;        // 'm' and 'r' are mixing constants generated offline.        // They're not really 'magic', they just happen to work well.        final int m = 0x5bd1e995;        final int r = 24;        // Initialize the hash to a random value        int h = seed ^ length;        int length4 = length / 4;        for (int i = 0; i < length4; i++) {            final int i4 = i * 4;            int k = (data[i4 + 0] & 0xff) + ((data[i4 + 1] & 0xff) << 8) + ((data[i4 + 2] & 0xff) << 16) + ((data[i4 + 3] & 0xff) << 24);            k *= m;            k ^= k >>> r;            k *= m;            h *= m;            h ^= k;        }        // Handle the last few bytes of the input array        switch (length % 4) {            case 3:                h ^= (data[(length & ~3) + 2] & 0xff) << 16;            case 2:                h ^= (data[(length & ~3) + 1] & 0xff) << 8;            case 1:                h ^= data[length & ~3] & 0xff;                h *= m;        }        h ^= h >>> 13;        h *= m;        h ^= h >>> 15;        return h;    }


4 0
原创粉丝点击