1. 程式人生 > 資訊 >美國 SEC 再將知乎、理想汽車等 17 家公司列入“預摘牌名單”

美國 SEC 再將知乎、理想汽車等 17 家公司列入“預摘牌名單”

  • Java的“物件序列化”能將一個實現了Serialiable介面(標記介面,沒有任何方法)的物件轉化為一組byte,這樣日後要用到這個物件的時候,就能把這些byte資料恢復出來,並據此重新構建那個物件。這一點在跨網路的環境下也是如此,這就意味著序列化機制能自動補償作業系統方面的差異。也就是說,可以在Windows機器上建立一個物件,序列化之後,再通過網路傳到UNIX機器上,最後再那裡重建該物件,不用擔心在不同平臺上資料是怎麼表示的,以及byte順序怎麼樣,或者 別的什麼細節。
  • 要想序列化物件,必須先建立一個OutputStream,然後將其嵌入到ObjectOutputStream,這時就能用writeObject()方法把物件寫入OutputStream。讀的時候需要把IntputStream嵌入到ObjectIntputStream中,然後呼叫readObject()方法就可以了。不過,這樣讀出來的只是一個Object的reference,因此,在用之前,還得先上傳。

詳解見:http://www.cnblogs.com/xudong-bupt/archive/2013/05/19/3086493.html

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個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程式碼示例

 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 }

3.3執行結果

4.說明

讀取物件的順序與寫入時的順序要一致

物件的預設序列化機制寫入的內容是:物件的類,類簽名,以及非瞬態非靜態欄位的值。