我正在寻找一个库,给定一个对象树,在整个结构上执行消息摘要或散列。
我想看看传递给方法的对象是否被修改(该对象包含其他对象,包含对象等等 - 没有一个是不可变的)。
有没有办法检查结构中任何对象的状态是否发生变化?
答案 0 :(得分:1)
您可以为树中的所有对象实现hashCode()。如果根对象的hashCode已更改,则您知道树中某个对象的状态已更改。
答案 1 :(得分:0)
使用散列检测更改的问题是它不提供绝对的“否”答案。它只是告诉你可能没有被改变。
如果你没有错过一些更改,那么确定,在树上散列。
如果没有,你必须考虑其他选择,但在我提出建议之前,我需要更多地了解你的情况。
答案 2 :(得分:0)
我使用JRE提供的标准MessageDigest和MD5完成了这项工作。
关于碰撞,当我有两个具有相同MD5的对象时,我知道它们可能是相同的,所以我做了一个完整的递归比较。尽管如此,冲突是不可能的,并且确实值得实施这项技术。