<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      學與思

      博客園 首頁 新隨筆 聯系 訂閱 管理

      serialVersionUID的作用  

      2011-05-12 16:04:19|  分類: java|舉報|字號 訂閱

       
       

      在很多應用中,需要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。比如最常見的是Web服務器中的Session對象,當有10萬用戶并發訪問,就有可能出現10萬個Session對象,內存可能吃不消,于是Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中,說白了,就是能將一個2進制文件變成內存中的對象。在JAVA中,要實現這種機制,只要實現Serializable接口就可以了,先看下面這個簡單例子,serialVersionUID稍后引出。我們先定義一個簡單的Person類,然后創建這個對象,最后序列化它到一個文件。

      /*****(Person類)*******/

      import java.io.Serializable; 
        
      public class Person implements Serializable { 
          
          private String name; 
          
          public String getName() { 
              return name; 
          } 
          public void setName(String name) { 
              this.name = name; 
          } 

       

      /*****(將對象序列化到一個文件)*******/

      import java.io.FileOutputStream; 
      import java.io.ObjectInputStream; 
      import java.io.ObjectOutputStream; 
        
      public class WhySerialversionUID { 
        
      public static void main(String[] args) throws Exception { 
        
             
      Person person= new Person(); 
      person.setName("jack"); 
        
      ObjectOutputStream oo = new ObjectOutputStream  (new FileOutputStream(new File("E://jack.test"))); 
                                   oo.writeObject(person); 
      oo.close(); 
       

      /*****(通過以下方法可以正常的將文件中保存的對象還原到內存中)*******/

      import java.io.FileOutputStream; 
      import java.io.ObjectInputStream; 
      import java.io.ObjectOutputStream; 
        
      public class WhySerialversionUID { 
        
      public static void main(String[] args) throws Exception { 
        
       ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:\\jack.test")));
                 Person person = (Person)ois.readObject();    
                  String name= person.getName();
                System.Out.Print("name is: "+name);

      一切都那么順利,但是如果在序列化之后,Person這個類發生了改變呢?比如,多了一個成員變量。我們做如下試驗,還是先將對象序列化到一個文件中,之后在Person這個類中添加一個成員變量,如下:


       
      import java.io.Serializable; 
        
      public class Person implements Serializable { 
          
          private String name; 
          //添加這么一個成員變量 
          private String address; 
          
          public String getName() { 
              return name; 
          } 
          public void setName(String name) { 
              this.name = name; 
          } 
      }

       

      之后,我們再去運行一下還原,就發現運行出錯了,會報如下錯誤:
      Exception in thread “main” java.io.InvalidClassException: Person; local class incompatible: stream classdesc serialVersionUID = 8383901821872620925, local class serialVersionUID = -763618247875550322
      意思就是說,文件流中的class和classpath中的class,也就是修改過后的class,不兼容了,處于安全機制考慮,程序拋出了錯誤,并且拒絕載入。那么如果我們真的有需求要在序列化后添加一個字段或者方法呢?應該怎么辦?那就是自己去指定serialVersionUID。之前,在我們的例子中,我們是沒有指定serialVersionUID的,那么java編譯器會自動給這個class進行一個摘要算法,類似于指紋算法,只要這個文件多一個空格,得到的UID就會截然不同的,可以保證在這么多類中,這個編號是唯一的。所以,我們添加了一個字段后,由于沒有顯指定serialVersionUID,編譯器又為我們生成了一個UID,當然和前面保存在文件中的那個不會一樣了,于是就出現了2個號碼不一致的錯誤。因此,只要我們自己指定了serialVersionUID,就可以在序列化后,去添加一個字段,或者方法,而不會影響到后期的還原,還原后的對象照樣可以使用,而且還多了方法可以用,呵呵。但是serialVersionUID我們怎么去生成呢?你可以寫1,也可以寫2,都無所謂,但是最好還是按照摘要算法,生成一個惟一的指紋數字,eclipse可以自動生成的,jdk也自帶了這個工具。一般寫法類似于
      private static final long serialVersionUID = -763618247875550322L;在引用serializable這個類的前面有一個感嘆號,單擊這個感嘆號后會有提示,一個是默認的,一個為此類自動產生一個SerialVersionUID!

       

      本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jimforme/archive/2010/01/02/5120587.aspx

      posted on 2014-03-06 15:57  學與思  閱讀(398)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美高清一区三区在线专区| 亚洲精品日本一区二区| 丝袜美腿亚洲综合在线观看视频| 国语偷拍视频一区二区三区| 九九九精品成人免费视频小说 | 老司机午夜福利视频| 中年国产丰满熟女乱子正在播放| 亚洲精品第一国产综合精品| 国产精品久久久久乳精品爆| 中文日韩在线一区二区| 国产一级av在线播放| 亚洲中文字幕综合小综合| 四虎永久免费高清视频| 欧美videos粗暴| 激,情四虎欧美视频图片| 99久久激情国产精品| 久久夜色精品国产亚洲a| 久久99热精品这里久久精品| 国产怡春院无码一区二区| 亚洲精品美女一区二区| 人妻少妇无码精品专区| 亚洲aⅴ无码专区在线观看q| 无码免费大香伊蕉在人线国产 | 狠狠躁夜夜躁人人爽天天古典| 国产人成精品一区二区三| 亚洲区1区3区4区中文字幕码| 欧洲亚洲精品免费二区| 99视频在线精品国自产拍| 久久99精品久久久久久青青| 国产成人综合亚洲第一区| 欧美韩中文精品有码视频在线| 99中文字幕国产精品| 91精品国产麻豆国产自产| 亚洲日韩中文字幕在线播放| 日韩精品一区二区三区激| 中文字幕无码不卡在线| 激情综合网激情国产av| 熟女一区| ww污污污网站在线看com| 国产一级黄色片在线播放| 在线天堂www在线|