java序列化與反序列化

 public interface Serializable類通過實現 java.io.Serializable 接口以啓用其序列化功能。未實現此接口的類將無法使其任何狀態序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。序列化接口沒有方法或字段,僅用於標識可序列化的語義。

 

        序列化就是將一個對象的狀態(各個屬性量)保存起來,然後在適當的時候再獲得。
  
        序列化分爲兩大部分:序列化和反序列化。序列化是這個過程的第一部分,將數據分解成字節流,以便存儲在文件中或在網絡上傳輸。反序列化就是打開字節流並重構對象。對象序列化不僅要將基本數據類型轉換成字節表示,有時還要恢復數據。恢復數據要求有恢復數據的對象實例
  
        序列化有什麼特點:
  
        如果某個類能夠被序列化,其子類也可以被序列化。

 

        聲明爲static和transient類型的成員數據不能被序列化。
    
        static是類共享的,當該類一個對象被序列化後,這個static變量可能會被另一個對象改變,所以這決定了靜態變量是不能序列化的,但如果是final,就可以,因爲這是一個常量。

 

        如果用transient聲明一個實例變量,當對象存儲時,它的值不需要維持。換句話來說就是,用transient關鍵字標記的成員變量不參與序列化過程。

 

        什麼時候使用序列化:

 

        對象序列化可以實現分佈式對象。主要應用例如:RMI要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣。

 

        java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。可以將整個對象層次寫入字節流中,可以保存在文件中或在網絡連接上傳遞。利用對象序列化可以進行對象的"深複製",即複製對象本身及引用的對象本身。序列化一個對象可能得到整個對象序列。

 

Java代碼  收藏代碼

  1. import java.io.Serializable;  

  2.   

  3. /** 

  4.  *  

  5.  * @author InJavaWeTrust 

  6.  * 

  7.  */  

  8. public class Person implements Serializable{  

  9.   

  10.     private static final long serialVersionUID = -399858645849256406L;  

  11.       

  12.     private String name;  

  13.     private String sex;  

  14.     public String getName() {  

  15.         return name;  

  16.     }  

  17.     public void setName(String name) {  

  18.         this.name = name;  

  19.     }  

  20.     public String getSex() {  

  21.         return sex;  

  22.     }  

  23.     public void setSex(String sex) {  

  24.         this.sex = sex;  

  25.     }  

  26.       

  27. }  

 

Java代碼  收藏代碼獲取【下載地址】  

  1. import java.io.File;  

  2. import java.io.FileInputStream;  

  3. import java.io.FileNotFoundException;  

  4. import java.io.FileOutputStream;  

  5. import java.io.IOException;  

  6. import java.io.InputStream;  

  7. import java.io.ObjectInputStream;  

  8. import java.io.ObjectOutputStream;  

  9. import java.io.OutputStream;  

  10.   

  11. /** 

  12.  * 序列化與反序列化 

  13.  * @author InJavaWeTrust 

  14.  * 

  15.  */  

  16. public class TestPerson {  

  17.       

  18.     public static void main(String[] args) {  

  19.         Person person = new Person();  

  20.         person.setName("java");  

  21.         person.setSex("F");  

  22.         File file = new File("d:\\person.txt");  

  23.         try {  

  24.             file.createNewFile();  

  25.         } catch (IOException e) {  

  26.             e.printStackTrace();  

  27.         }  

  28.         try {  

  29.             //序列化  

  30.             OutputStream os = new FileOutputStream(file);  

  31.             ObjectOutputStream oos = new ObjectOutputStream(os);  

  32.             oos.writeObject(person);  

  33.             oos.flush();  

  34.             oos.close();  

  35.             os.close();  

  36.             //反序列化  

  37.             InputStream is = new FileInputStream(file);  

  38.             ObjectInputStream ois = new ObjectInputStream(is);  

  39.             Person per = (Person) ois.readObject();  

  40.             System.out.println("name[" + per.getName() + "]");  

  41.             System.out.println("sex[" + per.getSex() + "]");  

  42.             ois.close();  

  43.             is.close();  

  44.         } catch (FileNotFoundException e) {  

  45.             e.printStackTrace();  

  46.         } catch (IOException e) {  

  47.             e.printStackTrace();  

  48.         } catch (ClassNotFoundException e) {  

  49.             e.printStackTrace();  

  50.         }  

  51.     }  

  52.   

  53. }  

 


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