3

次のスニペットを使用してシリアライズ可能なオブジェクトを圧縮しています:

 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 ハッシュは一致しません。解凍後にオブジェクトをそのまま取得する方法を教えてください。

ありがとう。

4

1 に答える 1

0

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

于 2012-04-21T17:36:48.847 に答える