object - 对象压缩后 MD5 哈希不匹配

标签 object md5 compression mismatch

我正在使用以下代码片段压缩可序列化对象:

 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 Hash不匹配。请指点解压后如何获取Object。

谢谢。

最佳答案

您可能需要在 GZIPOutputStream 上使用 finish 方法来压缩数据。

关于object - 对象压缩后 MD5 哈希不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10258449/

相关文章:

javascript - Object.fromEntries 仅在 iOS 上可用? ( react native - 不是网络)

php - 如何使用md5哈希值?

java - 使用 char[] 生成 MD5 哈希

floating-point - IEEE-754数据的压缩算法

compression - 如何快速检查 zip 文件是否损坏?

javascript - 转换对象以使用扩展运算符?

java - 如何在java中搜索对象数组然后更新对象的一部分?

java - 在java中将JSON对象解析为字符串

Python 2 - 解密 Java 的 PBEWithMD5AndDES

lucene - Lucene 中的 VInt 是什么?