<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 122,  comments - 25,  trackbacks - 0

    1、什么是java序列化

    Java 序列化 API 提供一種處理對象序列化的標準機制。序列化Serialization是指將java對象用一連串字節描述的一個過程;反序列化deserialization是一種將這一串字節構建成一個對象的過程。


    2、序列化的作用(必要性)

    Java中,一切都是對象,在分布式環境中經常需要將對象從這一端網絡或設備傳遞到另一端。Java 序列化機制就是一種解決在網絡兩端傳輸數據的問題而產生的協議。下圖表示客戶端/服務器之間通信,一個對象是從客戶端傳送到服務器通過序列化的視圖。


    3、如何序列化一個對象

    為序列化一個對象,你需確保對象類實現Serializable接口。Serializable接口沒有方法,只要實現了序列化接口,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     }

    執行結果為: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

    這些二進制字節就是用來描述序列化以后的TestClassSerial對象的,我們注意到 TestSerial 類中只有兩個域:

    1 public  byte version = 100;
    2 public byte count = 0;

    都是 byte 型,理論上存儲這兩個域只需要 2 byte ,但是實際上 temp.out 占據空間為 51bytes ,也就是說除了數據以外,還包括了對序列化對象的其他描述。


    5、Java 的序列化算法

    序列化算法一般會按步驟做如下事情:

    1、將對象實例相關的類的元數據輸出;
    2、
    遞歸地輸出類的超類元數據描述直到不再有超類;
    3、
    類元數據完了以后,開始從最頂層的超類開始輸出對象實例的實際數據值;
    4、
    從上至下遞歸輸出實例的數據;


    更多序例化事例及二進制字節含義參考文檔:http://my.oschina.net/god/blog/1291

    posted on 2010-12-16 14:52 josson 閱讀(818) 評論(0)  編輯  收藏 所屬分類: java 開發
    <2010年12月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线精品免费视频| 无码国产精品一区二区免费式影视| 成人免费无遮挡无码黄漫视频| 在线电影你懂的亚洲| a级毛片毛片免费观看久潮| 久久亚洲欧洲国产综合| 伊人久久大香线蕉免费视频| 亚洲欧洲成人精品香蕉网| 三级毛片在线免费观看| 亚洲v高清理论电影| 亚洲视频在线观看免费视频| 亚洲最大的黄色网| 成人au免费视频影院| 亚洲jizzjizz少妇| 亚洲国产天堂久久综合| 国产无遮挡色视频免费观看性色 | 在线观看亚洲天天一三视| 国产一级a毛一级a看免费视频| 亚洲av无码国产精品夜色午夜 | 国产精品1024永久免费视频| 国产成人精品日本亚洲专| 热久久精品免费视频| 污视频网站在线观看免费| 亚洲精品少妇30p| 182tv免费观看在线视频| 亚洲欧美日韩综合久久久| 亚洲AV无码成人精品区大在线| 一区二区三区在线免费观看视频| 亚洲国产精品国自产拍AV| 一区二区无码免费视频网站| 麻豆亚洲AV成人无码久久精品 | 国产精品免费大片一区二区| 五月天网站亚洲小说| 成人性生交大片免费看无遮挡 | 亚洲国产精品第一区二区| 99在线视频免费观看视频| 免费精品国自产拍在线播放 | 一区二区三区观看免费中文视频在线播放 | 亚洲欧洲自拍拍偷综合| 日本免费电影一区| 男女拍拍拍免费视频网站|