1、什么是java序列化
Java
序列化
API
提供一種處理對象序列化的標準機制。序列化(Serialization)是指將java對象用一連串字節(jié)描述的一個過程;反序列化(deserialization)是一種將這一串字節(jié)構建成一個對象的過程。
2、序列化的作用(必要性)
Java中,一切都是對象,在分布式環(huán)境中經常需要將對象從這一端網絡或設備傳遞到另一端。Java
序列化機制就是一種解決在網絡兩端傳輸數據的問題而產生的協(xié)議。下圖表示客戶端/服務器之間通信,一個對象是從客戶端傳送到服務器通過序列化的視圖。

3、如何序列化一個對象
為序列化一個對象,你需確保對象類實現(xiàn)Serializable接口。Serializable接口沒有方法,只要實現(xiàn)了序列化接口,Class
就能被序列化機制處理。
示例代碼,需序列化的java對象:
1 import java.io.Serializable;
2
3 public class TestClassSerial implements Serializable {
4 public byte version = 100;
5 public byte count = 0;
6 }
示例代碼,
把TestClassSerial對照象
輸出成
Byte
流,存儲到
temp.out
文件里:
1 public static void main(String args[]) throws IOException {
2 FileOutputStream fos = null;
3 ObjectOutputStream oos = null;
4 try {
5 fos = new FileOutputStream("c:/temp.out");
6 oos = new ObjectOutputStream(fos);
7 TestClassSerial tcs = new TestClassSerial();
8 oos.writeObject(tcs);
9 oos.flush();
10 }
11 finally {
12 if(oos != null) {
13 oos.close();
14 }
15 if(fos != null) {
16 fos.close();
17 }
18 }
19 }
示例代碼,
從持久的文件中讀取
Bytes
重建對象:
1 public static void main1(String args[]) throws IOException {
2 FileInputStream fis = null;
3 ObjectInputStream oin = null;
4 try {
5 fis = new FileInputStream("c:/temp.out");
6 oin = new ObjectInputStream(fis);
7 TestClassSerial tcs = (TestClassSerial) oin.readObject();
8 System.out.println("version="+tcs.version);
9 }
10 finally {
11 if(fis != null) {
12 fis.close();
13 }
14 if(oin != null) {
15 oin.close();
16 }
17 }
18 }
執(zhí)行結果為:100.
4、對象的序列化格式
TestClassSerial對象序列化輸出的
temp.out
文件,以
16
進制方式顯示,內容如下:
AC ED 00 05 73 72 00 0A 53 65 72 69 61 6C 54 65
73 74 A0 0C 34 00 FE B1 DD F9 02 00 02 42 00 05
63 6F 75 6E 74 42 00 07 76 65 72 73 69 6F 6E 78
70 00 64
這些二進制字節(jié)就是用來描述序列化以后的TestClassSerial對象的,我們注意到
TestSerial
類中只有兩個域:
1 public byte version = 100;
2 public byte count = 0;
都是
byte
型,理論上存儲這兩個域只需要
2
個
byte
,但是實際上
temp.out
占據空間為
51bytes
,也就是說除了數據以外,還包括了對序列化對象的其他描述。
5、Java
的序列化算法
序列化算法一般會按步驟做如下事情:
1、將對象實例相關的類的元數據輸出;
2、遞歸地輸出類的超類元數據描述直到不再有超類;
3、類元數據完了以后,開始從最頂層的超類開始輸出對象實例的實際數據值;
4、從上至下遞歸輸出實例的數據;
更多序例化事例及二進制字節(jié)含義參考文檔:http://my.oschina.net/god/blog/1291
posted on 2010-12-16 14:52
josson 閱讀(816)
評論(0) 編輯 收藏 所屬分類:
java 開發(fā)