歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java對象的序列化

1.什麼是Java序列化

Java平台允許我們在內存中創建可復用的Java對象,但一般情況下,只有當JVM處於運行時,這些對象才可能存在,即,這些對象的生命周期不會比JVM的生命周期更長。但在現實應用中,就可能要求在JVM停止運行之後能夠保存(持久化)指定的對象,並在將來重新讀取被保存的對象。Java對象序列化就能夠幫助我們實現該功能。

使用Java對象序列化,在保存對象時,會把其狀態保存為一組字節,在未來,再將這些字節組裝成對象。必須注意地是,對象序列化保存的是對象的"狀態",即它的成員變量。由此可知,對象序列化不會關注類中的靜態變量。

除了在持久化對象時會用到對象序列化之外,當使用RMI(遠程方法調用),或在網絡中傳遞對象時,都會用到對象序列化。Java序列化API為處理對象序列化提供了一個標准機制,該API簡單易用。

Java中介者設計模式 http://www.linuxidc.com/Linux/2014-07/104319.htm

Java 設計模式之模板方法開發中應用 http://www.linuxidc.com/Linux/2014-07/104318.htm

設計模式之 Java 中的單例模式(Singleton) http://www.linuxidc.com/Linux/2014-06/103542.htm

Java對象序列化 http://www.linuxidc.com/Linux/2014-10/107584.htm

2.如何序列化一個對象

一個對象能夠序列化的前提是實現Serializable接口,Serializable接口沒有方法,更像是個標記。有了這個標記的Class就能被序列化機制處理。

import java.io.Serializable; 
 
class TestSerial implements Serializable { 
 
      public byte version = 100; 
 
      public byte count = 0; 
 
}

然後我們寫個程序將對象序列化並輸出。ObjectOutputStream能把Object輸出成Byte流。我們將Byte流暫時存儲到temp.out文件裡。

public static void main(String args[]) throws IOException { 
 
      FileOutputStream fos = new FileOutputStream("temp.out"); 
 
      ObjectOutputStream oos = new ObjectOutputStream(fos); 
 
      TestSerial ts = new TestSerial(); 
 
      oos.writeObject(ts); 
 
      oos.flush(); 
 
      oos.close(); 

如果要從持久的文件中讀取Bytes重建對象,我們可以使用ObjectInputStream。

public static void main(String args[]) throws IOException { 
 
      FileInputStream fis = new FileInputStream("temp.out"); 
 
      ObjectInputStream oin = new ObjectInputStream(fis); 
 
      TestSerial ts = (TestSerial) oin.readObject(); 
 
      System.out.println("version="+ts.version); 
 
}

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-10/108466p2.htm

Copyright © Linux教程網 All Rights Reserved