Java對象序列化

Java對象序列化

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

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

1.概念

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

2.用途

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

3.對象序列化

3.1序列化API

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

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

3.2代碼示例

複製代碼

 java.io.*    main(String[] args) 
        
        
        ObjectOutputStream out =  ObjectOutputStream( FileOutputStream("D:\\objectFile.obj"=  Customer("王麻子", 24"你好!");    
        out.writeObject( Date());    
        out.writeObject(customer);    
        ObjectInputStream in =  ObjectInputStream( FileInputStream("D:\\objectFile.obj""obj1 " + (String) in.readObject());    
        System.out.println("obj2 " + (Date) in.readObject());    
        Customer obj3 = (Customer) in.readObject();    
        System.out.println("obj3 " + Customer   Customer(String name, .name =.age = "name=" + name + ", age=" +

複製代碼

3.3執行結果

4.說明

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

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


轉自:http://www.cnblogs.com/xudong-bupt/archive/2013/05/19/3086493.html

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