什麼是Java序列化,如何實現java序列化

簡要解釋:
  
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。
  序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。序列化的實現:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,
而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

詳細解釋:

      當兩個進程在進行遠程通訊時,彼此能夠發送各類類型的數據。不管是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方須要把這個Java對象轉換爲字節序列,才能在網絡上傳送;接收方則須要把字節序列再恢復爲Java對象。java

  只能將支持 java.io.Serializable 接口的對象寫入流中。每一個 serializable 對象的類都被編碼,編碼內容包括類名和類簽名、對象的字段值和數組值,以及從初始對象中引用的其餘全部對象的閉包數組

1.概念網絡

  序列化:把Java對象轉換爲字節序列的過程。
  反序列化:把字節序列恢復爲Java對象的過程。閉包

2.用途this

  對象的序列化主要有兩種用途:
  1) 把對象的字節序列永久地保存到硬盤上,一般存放在一個文件中;
  2) 在網絡上傳送對象的字節序列。編碼

 

3.對象序列化spa

序列化API3d

  java.io.ObjectOutputStream表明對象輸出流,它的writeObject(Object obj)方法可對參數指定的obj對象進行序列化,把獲得的字節序列寫到一個目標輸出流中。只有實現了Serializable和Externalizable接口的類的對象才能被序列化。code

  java.io.ObjectInputStream表明對象輸入流,它的readObject()方法從一個源輸入流中讀取字節序列,再把它們反序列化爲一個對象,並將其返回。對象

代碼示例

 1 import java.io.*;
 2 import java.util.Date;
 3 
 4 public class ObjectSaver {
 5     public static void main(String[] args) throws Exception {
 6         /*其中的  D:\\objectFile.obj 表示存放序列化對象的文件*/
 7 
 8         
 9         //序列化對象
10         ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:\\objectFile.obj"));
11         Customer customer = new Customer("王麻子", 24);    
12         out.writeObject("你好!");    //寫入字面值常量
13         out.writeObject(new Date());    //寫入匿名Date對象
14         out.writeObject(customer);    //寫入customer對象
15         out.close();
16 
17         
18         //反序列化對象
19         ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\objectFile.obj"));
20         System.out.println("obj1 " + (String) in.readObject());    //讀取字面值常量
21         System.out.println("obj2 " + (Date) in.readObject());    //讀取匿名Date對象
22         Customer obj3 = (Customer) in.readObject();    //讀取customer對象
23         System.out.println("obj3 " + obj3);
24         in.close();
25     }
26 }
27 
28 class Customer implements Serializable {
29     private String name;
30     private int age;
31     public Customer(String name, int age) {
32         this.name = name;
33         this.age = age;
34     }
35 
36     public String toString() {
37         return "name=" + name + ", age=" + age;
38     }
39 }

執行結果

 

4.說明

  讀取對象的順序與寫入時的順序要一致

  對象的默認序列化機制寫入的內容是:對象的類,類簽名,以及非瞬態非靜態字段的值。

相關文章
相關標籤/搜索