那么如何明確相比于一個(gè)特定的時(shí)刻,某個(gè)對象實(shí)例中的數(shù)據(jù)發(fā)生了變化呢?
方法肯定不止一種,我的方法是:
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);
}
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);
}
說白了就是把一個(gè)對象實(shí)例看作byte數(shù)組,然后對這個(gè)byte數(shù)組計(jì)算MD5,如果MD5值一樣就表示所含數(shù)據(jù)一致。
MD5算法不是完美的,但是在實(shí)際應(yīng)用中已經(jīng)足夠的,你也可以使用CRC32。
歡迎指正。