djxchen

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            4 Posts :: 3 Stories :: 3 Comments :: 0 Trackbacks

           

          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?因為你必須顯式的序列化和反序列化程序里的對象;而不是直接由一個關鍵詞來定義一個對象是序列化的然后由系統做相應的處理。


          下面是關于序列化的一個實例:

          程序名稱: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的實例變量是一樣的,輸出如下:[code:1:a55efb5f91]object1:s=Hello;i=-7;d=2.7E10
          object2:s=Hello;i=-7;d=2.7E10
          posted on 2008-10-11 22:16 于元 閱讀(257) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 山东省| 察隅县| 临朐县| 奎屯市| 漾濞| 肇州县| 永顺县| 腾冲县| 嘉荫县| 江源县| 醴陵市| 西乌| 安义县| 临朐县| 肥东县| 榆社县| 乌拉特前旗| 安福县| 肥城市| 晋城| 清原| 年辖:市辖区| 阳高县| 衡水市| 会同县| 木里| 自治县| 平湖市| 浪卡子县| 亳州市| 湾仔区| 宁津县| 巫山县| 三河市| 原阳县| 海口市| 万盛区| 盈江县| 工布江达县| 阜城县| 东乌珠穆沁旗|