<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-49  文章-56  trackbacks-0

    序列化是把一個對象的狀態寫入一個字節流的過程,它執行RMI,RMI允許一臺機器上的JAVA對象調用不同機器上的JAVA對象方法,對象可以作為參數提供給那個遠程方法,發送機序列化該對象并傳送它,接收機執行反序列化。
    序列化和反序列化的關系圖表可形成包含循環引用的順序圖表。這是整個序列化的總體思想。
    而Serializable接口屬于支持序列化的一個接口,只有一個實現它的對象可以被序列化工具存儲和回復,Serializable接口沒有定義任何成員,只用來表示一個累可以被序列化,若該類可以序列化,那么它的所有子類都可以。
    下面是關于序列化的一個實例:
    程序名稱:SerializationDemo.java
    程序主題:實現對象的序列化和反序列化
    程序說明:該程序由實例化一個MyClass類的對象開始,該對象有三個實例變量,類型分別為String、int、double,是希望存儲和恢復的信息。

     

    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;
     }
    }

     

    程序運行結果:object1和object2的實例變量是一樣的,輸出如下:
    object1:s=Hello;i=-7;d=2.7E10
    object2:s=Hello;i=-7;d=2.7E10


    我補充一下:

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

    serialization不但可以在本機做,而且可以經由網絡操作(就是貓小說的RMI)。這個好處是很大的----因為它自動屏蔽了操作系統的差異,字節順序(用Unix下的c開發過網絡編程的人應該知道這個概念,我就容易在這上面犯錯)等。比如,在Window平臺生成一個對象并序列化之,然后通過網絡傳到一臺Unix機器上,然后可以在這臺Unix機器上正確地重構這個對象。


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

    2。Java的JavaBeans.   Bean的狀態信息通常是在設計時配置的。Bean的狀態信息必須被存起來,以便當程序運行時能恢復這些狀態信息。這也需要serializaiton機制。

     

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

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

    為什么說Java的serialization機制實現的是lightweight persistence?因為你必須顯式的序列化和反序列化程序里的對象;而不是直接由一個關鍵詞來定義一個對象是序列化的然后由系統做相應的處理。  如果以后的Java版本出現一個新的關鍵字來實現這種機制,比如就是persistence,如果我用

    persistence  (String s="chinaunix")

    然后系統自動做貓小程序里的那些處理,那么Java就實現了persistence.

    posted on 2009-11-29 21:31 junly 閱讀(216) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 久久久久久久综合日本亚洲| 国产成人免费午夜在线观看| 国产yw855.c免费视频| 亚洲电影在线免费观看| 久久国产乱子伦精品免费不卡| 日韩一卡2卡3卡4卡新区亚洲| 美女被免费网站在线视频免费| 天天摸夜夜摸成人免费视频| 亚洲乱色伦图片区小说| 全免费a级毛片免费**视频| 亚洲乱码国产乱码精华| 国产又粗又猛又爽又黄的免费视频 | 国产一区二区三区在线免费| 亚洲爆乳无码精品AAA片蜜桃| 国产在线观看www鲁啊鲁免费| 男人免费视频一区二区在线观看 | 久久精品国产大片免费观看| 久久综合九九亚洲一区| 亚欧免费视频一区二区三区| 亚洲国产系列一区二区三区| 好爽…又高潮了免费毛片| 国产成人不卡亚洲精品91| 久久精品国产亚洲精品| 99久久免费精品高清特色大片| 亚洲一区二区三区深夜天堂| 午夜一区二区免费视频| 精品人妻系列无码人妻免费视频| 日韩亚洲一区二区三区| a毛片基地免费全部视频| 亚洲欧美中文日韩视频| 亚洲视频在线精品| 95免费观看体验区视频| 亚洲码和欧洲码一码二码三码| 亚洲午夜无码AV毛片久久| 久久国产色AV免费看| 亚洲综合精品第一页| 亚洲自偷自偷在线制服| 一区二区无码免费视频网站| 一区二区在线视频免费观看| 亚洲美女视频网址| 免费人成在线观看视频播放|