新手問:java中的Serializable接口到底是做什麼用的?

       序列化是把一個對象的狀態寫入一個字節流的過程,它執行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的實例變量是一樣的,輸出如下:

  1. object1:s=Hello;i=-7;d=2.7E10
  2. object2:s=Hello;i=-7;d=2.7E10

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章