序列化方法仅适用于实际上可序列化的对象。因此,对于所有类型的对象是不可能的。
此外,这通过具有等效的对象图来比较对象,这不一定与相等的.equals()
对象图相同。
例如,由相同代码(具有相同数据)创建的 StringBuilder 对象将具有相等的 OOS 输出(即也相等的哈希),whileb1.equals(b2)
为 false,具有相同元素的 ArrayList 和 LinkedList 将被注册为不同,while list1.equals(list2)
is true
。
您可以通过创建一个 custom来避免将字节流转换为数组HashOutputStream
的步骤,它只是获取字节数据并对其进行哈希处理,而不是将其保存为数组以供以后迭代。
class HashOutputStream extends OutputStream {
private static final int PRIME = 13;
private int hash;
// all the other write methods delegate to this one
public void write(int b) {
this.hash = this.hash * PRIME + b;
}
public int getHash() {
return hash;
}
}
然后将您的 ObjectOutputStream 包裹在此类的对象周围。
y = y*13 + x
您可能会查看其他校验和算法,而不是您的方法。例如,java.util.zip 包含Adler32
(用于zlib
格式)和CRC32
(用于gzip
格式)。