J2EE社區(qū)

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          java中的Serializable接口的作用

          Posted on 2008-08-12 22:53 xcp 閱讀(3652) 評論(1)  編輯  收藏 所屬分類: JAVA

           

          Object serialization的定義:
          Object serialization 允許你將實(shí)現(xiàn)了Serializable接口的對象轉(zhuǎn)換為字節(jié)序列,這些字節(jié)序列可以被完全存儲以備以后重新生成原來的對象。

          serialization不但可以在本機(jī)做,而且可以經(jīng)由網(wǎng)絡(luò)操作(RMI)。這個好處是很大的----因?yàn)樗詣悠帘瘟瞬僮飨到y(tǒng)的差異,字節(jié)順序(用Unix下的c開發(fā)過網(wǎng)絡(luò)編程的人應(yīng)該知道這個概念)等。比如,在Window平臺生成一個對象并序列化之,然后通過網(wǎng)絡(luò)傳到一臺Unix機(jī)器上,然后可以在這臺Unix機(jī)器上正確地重構(gòu)這個對象。


          Object serialization主要用來支持2種主要的特性:
          1。Java的RMI(remote method invocation).RMI允許象在本機(jī)上一樣操作遠(yuǎn)程機(jī)器上的對象。當(dāng)發(fā)送消息給遠(yuǎn)程對象時,就需要用到serializaiton機(jī)制來發(fā)送參數(shù)和接收返回直。

          2。Java的JavaBeans. Bean的狀態(tài)信息通常是在設(shè)計時配置的。Bean的狀態(tài)信息必須被存起來,以便當(dāng)程序運(yùn)行時能恢復(fù)這些狀態(tài)信息。這也需要serializaiton機(jī)制。



          二。sakulagi和rollingpig說的持久化我也說一下。
          我覺得你們說的應(yīng)該是英文里的persistence.但是Java語言里現(xiàn)在只支持lightweight persistence,就是輕量級持久化,這是通過serialization機(jī)制來實(shí)現(xiàn)的。

          persistence是指一個對象的生命周期不由程序是否執(zhí)行來決定,即使是在程序終止時這個對象也存在。它把一個serializable的對象寫到磁盤(本機(jī)或其他機(jī)器上的非RAM存儲器),并在程序重新調(diào)用時再讀取對象到通常的RAM存儲器。

          為什么說Java的serialization機(jī)制實(shí)現(xiàn)的是lightweight persistence?因?yàn)槟惚仨氾@式的序列化和反序列化程序里的對象;而不是直接由一個關(guān)鍵詞來定義一個對象是序列化的然后由系統(tǒng)做相應(yīng)的處理。


          下面是關(guān)于序列化的一個實(shí)例:

          程序名稱:SerializationDemo.java
          程序主題:實(shí)現(xiàn)對象的序列化和反序列化
          程序說明:該程序由實(shí)例化一個MyClass類的對象開始,該對象有三個實(shí)例變量,類型分別為String、int、double,是希望存儲和恢復(fù)的信息。

          代碼內(nèi)容
          import java.io.*

          public class SerializationDemo
          public static void main(String args[])

          //Object serialization 
          try
          MyClass object1
          =new MyClass("Hello",-7,2.7e10); 
          System.out.println(
          "object1:"+object1); 
          FileOutputStream fos
          =new FileOutputStream("serial"); 
          ObjectOutputStream oos
          =new ObjectOutputStream(fos); 
          oos.writeObject(object1); 
          oos.flush(); 
          oos.close(); 
          }
           
          catch(Exception e)
          System.out.println(
          "Exception during serialization:"+e); 
          System.exit(
          0); 
          }
           

          //Object deserialization 
          try
          MyClass object2; 
          FileInputStream fis
          =new FileInputStream("serial"); 
          ObjectInputStream ois
          =new ObjectInputStream(fis); 
          object2
          =(MyClass)ois.readObject(); 
          ois.close(); 
          System.out.println(
          "object2:"+object2); 
          }
           
          catch(Exception e)
          System.out.println(
          "Exception during deserialization:"+e); 
          System.exit(
          0); 
          }
           
          }
           
          }
           

          class MyClass implements Serializable
          String s; 
          int i; 
          double d; 
          public MyClass(String s,int i,double d)
          this.s=s; 
          this.i=i; 
          this.d=d; 
          }
           
          public String toString()
          return "s="+s+";i="+i+";d="+d; 
          }
           
          }
           
          程序運(yùn)行結(jié)果:object1和object2的實(shí)例變量是一樣的,輸出如下:[code:1:a55efb5f91]object1:s=Hello;i=-7;d=2.7E10
          object2:s=Hello;i=-7;d=2.7E10



          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個方案乄而不是創(chuàng)造一個方案こ
          mail: 聯(lián)系我


          Feedback

          # re: java中的Serializable接口的作用   回復(fù)  更多評論   

          2013-07-03 09:19 by www.dsprint.cn(武漢印刷)
          學(xué)習(xí)了~
          主站蜘蛛池模板: 红桥区| 河东区| 洪雅县| 水富县| 运城市| 江津市| 武陟县| 安泽县| 青阳县| 雅安市| 贵德县| 广西| 鄂伦春自治旗| 本溪| 河间市| 包头市| 岢岚县| 台湾省| 留坝县| 阿拉尔市| 循化| 乾安县| 喀什市| 革吉县| 博爱县| 葫芦岛市| 洪雅县| 朝阳区| 浦北县| 扎兰屯市| 兴仁县| 天等县| 东光县| 泰安市| 延长县| 中卫市| 正定县| 兰考县| 都江堰市| 恭城| 曲阳县|