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 閱讀(315) 評論(0)  編輯  收藏 所屬分類: Java

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

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鄂伦春自治旗| 海阳市| 清原| 平谷区| 中方县| 丹凤县| 察隅县| 腾冲县| 湖南省| 榆树市| 鄂温| 永州市| 逊克县| 拉萨市| 福建省| 灵武市| 临海市| 泽库县| 溧水县| 九寨沟县| 河池市| 社会| 双辽市| 宁阳县| 名山县| 马关县| 祥云县| 曲松县| 古蔺县| 景泰县| 邢台市| 固阳县| 呼伦贝尔市| 泰州市| 五指山市| 孝感市| 义乌市| 临夏县| 正安县| 巢湖市| 静海县|