private Map createMatchesTable(byte[] data, int dataLength, int blockLength) { Adler32 adler32 = new Adler32();
private static Map createMatchesTable(byte[] data, int dataLength, int blockLength, PseudoAdler32 adler32) {
    private Map createMatchesTable(byte[] data, int dataLength, int blockLength) {        Adler32 adler32 = new Adler32();        Map matchesTable = new HashMap();        for(int i = 0; i < dataLength; i+= blockLength) {            // align block for Adler             int length = i + blockLength >= dataLength ? dataLength - i : blockLength;            adler32.update(data, i, length);            Long checksum = new Long(adler32.getValue());            if (!matchesTable.containsKey(checksum)) {                matchesTable.put(checksum, new Match(i, length));            }            adler32.reset();        }        return matchesTable;    }