有的时候应用程序会hold一个对象实例,随着时间的推移,该对象所含的数据可能发生变化(比如调用setter方法改变一个属性的值)。
那么如何明确相比于一个特定的时刻,某个对象实例中的数据发生了变化呢?
方法肯定不止一种,我的方法是:
public static String hashOf(Serializable object) throws IOException, NoSuchAlgorithmException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(baos);
oo.writeObject(object);
oo.flush();
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] data = baos.toByteArray();
oo.close();
baos.close();
messageDigest.update(data, 0, data.length);
BigInteger hash = new BigInteger(1, messageDigest.digest());
return String.format("%1$032X", hash);
}
说白了就是把一个对象实例看作byte数组,然后对这个byte数组计算MD5,如果MD5值一样就表示所含数据一致。
MD5算法不是完美的,但是在实际应用中已经足够的,你也可以使用CRC32。
欢迎指正。
posted on 2011-10-11 16:51
West Farmer 阅读(311)
评论(0) 编辑 收藏 所属分类:
Java