West Farm
          吾本布衣,生于川北,躬耕于代碼的田地上。
          posts - 16,  comments - 15,  trackbacks - 0
          有的時(shí)候應(yīng)用程序會hold一個(gè)對象實(shí)例,隨著時(shí)間的推移,該對象所含的數(shù)據(jù)可能發(fā)生變化(比如調(diào)用setter方法改變一個(gè)屬性的值)。
          那么如何明確相比于一個(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);
          }

          說白了就是把一個(gè)對象實(shí)例看作byte數(shù)組,然后對這個(gè)byte數(shù)組計(jì)算MD5,如果MD5值一樣就表示所含數(shù)據(jù)一致。
          MD5算法不是完美的,但是在實(shí)際應(yīng)用中已經(jīng)足夠的,你也可以使用CRC32。

          歡迎指正。
          posted on 2011-10-11 16:51 West Farmer 閱讀(318) 評論(0)  編輯  收藏 所屬分類: Java

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

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临汾市| 烟台市| 茂名市| 永昌县| 于田县| 信阳市| 尉犁县| 肇州县| 独山县| 永仁县| 富民县| 綦江县| 洛浦县| 新河县| 宽城| 英吉沙县| 商洛市| 南雄市| 赣榆县| 沧源| 红原县| 安义县| 尚义县| 云阳县| 屯留县| 越西县| 浮山县| 奉新县| 若羌县| 建德市| 南江县| 深州市| 台山市| 巴里| 明溪县| 湘潭市| 开江县| 南溪县| 区。| 屏东县| 靖州|