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