West Farm
吾本布衣,生于川北,躬耕于代码的田地上。
posts - 16,  comments - 15,  trackbacks - 0
有的时候应用程序会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

只有注册用户登录后才能发表评论。


网站导航:
 

<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿

随笔分类

随笔档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜