歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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();
    }

Copyright © Linux教程網 All Rights Reserved