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