Java里面计算Adler32校验

2014-11-24 08:47:17 ? 作者: ? 浏览: 1

虽然用过很多语言,觉得语言都不会是大问题。其实用起来,很多细节都不好把握的。所以编程语言虽然都长的很像的,但是一定要像《代码大全》里的说的,要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();
}


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: