2012-04-21 4 views
2

: 개체를 압축하기 전에 및 압축 해제 한 후MD5 해시 불일치 나는 다음 코드를 사용하여 직렬화 객체를 압축하고

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

: 다음 코드를 사용하여

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

을 그리고 같은 객체를 압축 해제 Object, 다음 스 니펫을 사용하여 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

안녕하세요. 마크, 도움이되지 않았습니다. 다른 포인터를 제안 해 주시겠습니까? –