原帖地址:http://www.ideagrace.com/html/doc/2006/06/30/00893.html
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.*;<br />public class serializable {<br />public static void main(String args[]) {<br />// Object serialization<br />try {<br />MyClass object1 = new MyClass("Hello", -7, 2.7e10);<br />System.out.println("object1:" + object1);<br />FileOutputStream fos = new FileOutputStream("reyes");<br />ObjectOutputStream oos = new ObjectOutputStream(fos);<br />oos.writeObject(object1);<br />oos.flush();<br />oos.close();<br />} catch (Exception e) {<br />System.out.println("Exception during serialization:" + e);<br />System.exit(0);<br />}<br />// Object deserialization<br />try {<br />MyClass object2;<br />FileInputStream fis = new FileInputStream("reyes");<br />ObjectInputStream ois = new ObjectInputStream(fis);<br />object2 = (MyClass) ois.readObject();<br />ois.close();<br />System.out.println("object2:" + object2);<br />} catch (Exception e) {<br />System.out.println("Exception during deserialization:" + e);<br />System.exit(0);<br />}<br />}<br />}<br />class MyClass implements Serializable {<br />/**<br /> *<br /> */<br />private static final long serial<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>VersionUID = 1L;<br />String s;<br />int i;<br />double d;<br />public MyClass(String s, int i, double d) {<br />this.s = s;<br />this.i = i;<br />this.d = d;<br />}<br />public String toString() {<br />return "s=" + s + ";i=" + i + ";d=" + d;<br />}<br />}
程式運行結果:object1和object2的執行個體變數是一樣的,輸出如下:[code:1:a55efb5f91]object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E1
0