java中的介面Serializable的作用和例子

來源:互聯網
上載者:User

java中的介面Serializable的作用和例子

作用:

沒有implements Serializable,你就不能通過rmi(包括ejb)提供遠程調用。
serialization 允許你將實現了Serializable介面的對象轉換為位元組序列,這些位元組序列可以被完全儲存以備以後重建原來的對象。
serialization不但可以在本機做,而且可以經由網路操作(就是貓小說的RMI)。這個好處是很大的----因為它自動屏蔽了作業系統的差異,位元組順序等。比如,在Window平台產生一個對象並序列化之,然後通過網路傳到一台Unix機器上,然後可以在這台Unix機器上正確地重構這個對象。
Object serialization主要用來支援2種主要的特性:
1。Java的RMI(remote method invocation).RMI允許象在本機上一樣操作遠程機器上的對象。當發送訊息給遠程對象時,就需要用到serializaiton機制來發送參數和接收返回直。
2。Java的JavaBeans. Bean的狀態資訊通常是在設計時配置的。Bean的狀態資訊必須被存起來,以便當程式運行時能恢複這些狀態資訊。這也需要serializaiton機制。
總之如果在網路的環境下做類傳輸,應該還是implements Serializable。

 

例子:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;

//定義序列化(object)
class Student implements Serializable {
      private int sno;
      private String sname;

      public Student(int sno, String sname) {
              this.sno = sno;
              this.sname = sname;
      }

      public int getSno() {
              return sno;
      }

      public void setSno(int sno) {
              this.sno = sno;
      }

      public String getSname() {
              return sname;
      }

      public void setSname(String sname) {
              this.sname = sname;
      }

      @Override
      public String toString() {
              return "學號:" + sno + ";姓名:" + sname;
      }

}
//(object)的還原序列化過程
class MyClient extends Thread {
      @Override
      public void run() {
              try {
                    Socket s = new Socket("localhost", 9999);
                    ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
                    Student stu = (Student) ois.readObject();
                    System.out.println("用戶端程式收到伺服器端程式傳輸過來的學生對象>> " + stu);
                    ois.close();
                    s.close();
              } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
              } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
              }
      }
}
//(object)的序列化過程
class MyServer extends Thread {

      @Override
      public void run() {
              try {
                    ServerSocket ss = new ServerSocket(9999);
                    Socket s = ss.accept();
                    ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream());
                    Student stu = new Student(1, "趙本山");
                    ops.writeObject(stu);
                    ops.close();
                    s.close();
                    ss.close();
              } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
              }
      }

}
//測試
public class TestTransfer {
      public static void main(String[] args) {
              new MyServer().start();
              new MyClient().start();
      }
}

 

參照這個例子就會很好的理解Serializable介面的用法和作用了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.