xxhash hashing. This package supports both block hashing via {@link net.jpountz.xxhash.XXHash32} and streaming hashing via {@link net.jpountz.xxhash.StreamingXXHash32}. Have a look at {@link net.jpountz.xxhash.XXHashFactory} to know how to get instances of these interfaces.

Streaming hashing is a little slower but doesn't require to load the whole stream into memory.

Sample block usage:

        XXHashFactory factory = XXHashFactory.fastestInstance();

        byte[] data = "12345345234572".getBytes("UTF-8");

        XXHash32 hash32 = factory.hash32();
        int seed = 0x9747b28c; // used to initialize the hash value, use whatever
                               // value you want, but always the same
        int hash = hash32.hash(data, 0, data.length, seed);

Sample streaming usage:

        XXHashFactory factory = XXHashFactory.fastestInstance();

        byte[] data = "12345345234572".getBytes("UTF-8");
        ByteArrayInputStream in = new ByteArrayInputStream(data);

        int seed = 0x9747b28c; // used to initialize the hash value, use whatever
                               // value you want, but always the same
        StreamingXXHash32 hash32 = factory.newStreamingHash32(seed);
        byte[] buf = new byte[8]; // for real-world usage, use a larger buffer, like 8192 bytes
        for (;;) {
          int read = in.read(buf);
          if (read == -1) {
            break;
          }
          hash32.update(buf, 0, read);
        }
        int hash = hash32.getValue();