Java的序列化 – JAVA編程語言程序開發技術文章

1.序列化理解成“打碎”是可以的,不過在書本上的名詞就是將對象轉換成二進制。一般用於將對象通過網絡傳輸、保存成文件或寫入數據庫中,打碎後更易搬運或I/O;

2.序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間。序列化是為瞭更易於對對象流進行讀寫操作或網絡傳輸;

3.客戶端A中的數據要轉換成二級制字節,才能在網絡中傳輸,客戶端B收到後再轉換成數據。這個過程就是序列化和反序列化,前者或叫寫出,後者或叫讀取;

4.如果要將對象通過網絡傳輸或保存成本地文件,就必須將其序列化;

5.序列化以後對象,就變成瞭2進制的文件,也就是可以儲存和傳輸。有2個好處:1) 如果是應用程序的話每次都把對象保持在文件裡的話就不怕突然停電,下次啟動你可以直接從文件裡讀出來最新的對象信息。2)RMI,EJB等實現基礎就是對象的序列化;

6.如果某個類能夠被序列化,其子類也可以被序列化。聲明為static和transient類型的成員數據不能被序列化。因為static代表類的狀態, transient代表對象的臨時數據;

7.什麼時候使用序列化:一:對象序列化可以實現分佈式對象。主要應用例如:RMI要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣。二:java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。可以將整個對象層次寫入字節流中,可以保存在文件中或在網絡連接上傳遞。利用對象序列化可以進行對象的"深復制",即復制對象本身及引用的對象本身。序列化一個對象可能得到整個對象序列;

8.序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable隻是為瞭標註該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。也可以說,隻需要兩個單詞,就可以搞定序列化操作:implements Serializable。見以下代碼:

[java] 
首先我們要把準備要序列化類,實現 Serializabel接口 
例如:我們要Person類裡的name和age都序列化 
import java.io.Serializable; 
 
public class Person implements Serializable { //本類可以序列化,implements Serializable要寫不然下面ObjectOutputStreamDemo.java執行報異常 
 private String name ; 
 private int age ; 
  
 public Person(String name,int age){ 
  this.name = name ; 
  this.age = age ; 
 } 
 public String toString(){ 
  return "姓名:" + this.name + ",年齡" + this.age ; 
 } 

[java] 
然後:我們將name和age序列化(也就是把這2個對象轉為二進制,統族理解為“打碎”) 
package org.lxh.SerDemo; 
 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.ObjectOutputStream ; 
 
public class ObjectOutputStreamDemo {  //序列化 
 
 public static void main(String[] args) throws Exception { 
//序列化後生成指定文件路徑 
  File file = new File("D:" + File.separator + "person.ser") ;            ObjectOutputStream oos = null ; 
//裝飾流(流) 
  oos = new ObjectOutputStream(new FileOutputStream(file)) ;  
//實例化類 
  Person per = new Person("張三",30) ;      oos.writeObject(per) ;//把類對象序列化 
  oos.close() ; 
 } 
}  

作者:berber78

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。