2012-04-21 7 views
2

た後、私は次のコードを使用して直列化可能なオブジェクトを圧縮しています:MD5ハッシュ不一致オブジェクトの圧縮

private byte[] compressObject(Object obj) throws IOException { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    GZIPOutputStream gzipOut = new GZIPOutputStream(baos); 
    ObjectOutputStream objectOut = new ObjectOutputStream(gzipOut); 
    objectOut.writeObject(obj);  
    objectOut.close(); 
    byte[] bytes = baos.toByteArray(); 

    return bytes;  
} 

、次のスニペット使用して同じオブジェクトを解凍:オブジェクトを圧縮する前と解凍後

private Object decompressObject(byte[] bytes) throws IOException,ClassNotFoundException { 
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 
    GZIPInputStream gzipIn = new GZIPInputStream(bais); 
    ObjectInputStream objectIn = new ObjectInputStream(gzipIn); 
    Object obj = objectIn.readObject();  
    objectIn.close(); 

    return obj; 
} 

をオブジェクト、私は以下のスニペットを使ってMD5ハッシュを計算します:

public String getMD5Hash(Object obj) throws IOException, NoSuchAlgorithmException { 

    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutput out = new ObjectOutputStream(bos); 
    out.writeObject(obj); 
    byte[] data = bos.toByteArray();     
    MessageDigest m = MessageDigest.getInstance("MD5");      
    m.update(data,0,data.length); 
    BigInteger i = new BigInteger(1,m.digest()); 
    return String.format("%1$032X", i);  
} 

しかし、圧縮前と圧縮後に計算されたMD5ハッシュは一致しません。解凍後にObjectを取得する方法を教えてください。

ありがとうございました。

答えて

0

おそらくGZIPOutputStreamでfinishメソッドを使用してデータを圧縮する必要があります。

+0

こんにちはマーク、これは助けになりませんでした。あなたはいくつかの他のポインタを提案できますか? –