Java里面计算Adler32校验


虽然用过很多语言,觉得语言都不会是大问题。其实用起来,很多细节都不好把握的。所以编程语言虽然都长的很像的,但是一定要像《代码大全》里的说的,要programming in。今天用java计算CheckSum,就搞了好久,出了莫名其妙的错。一开始把name(通过getBytes())和body(通过toByteArray)都转成了byte[],再申请一个新的足够大的byte[],结果就不知道如何复制进去了。用for太傻帽了,肯定不是这样,所以就下面这样写了一个:

    public long calcAdler32CheckSum(String name, ByteString body) {
        Adler32 checksum = new Adler32();
        StringBuffer sb = new StringBuffer(name.length() + body.size());
        checksum.update(sb.append(name).append(body.toByteArray()).toString().getBytes());
        return checksum.getValue();
    }

期中ByteString是com.google.protobuf.ByteString这个类。

这个实现的结果是,相同的输入,每次输出都不一样,那这还咋做校验呀。。。。

原来正确的实现应该是这样的:

期中ByteString是com.google.protobuf.ByteString这个类。

这个实现的结果是,相同的输入,每次输出都不一样,那这还咋做校验呀。。。。

原来正确的实现应该是这样的:

    public long calcAdler32CheckSum(String name, ByteString body) {
        Adler32 checksum = new Adler32();
        checksum.update(name.getBytes());
        checksum.update(body.toByteArray());
        return checksum.getValue();
    }

相关内容

    暂无相关文章