美國 SEC 再將知乎、理想汽車等 17 家公司列入“預摘牌名單”
阿新 • • 發佈:2022-04-23
- 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物件轉換為位元組序列的過程。 反序列化
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.說明
讀取物件的順序與寫入時的順序要一致。
物件的預設序列化機制寫入的內容是:物件的類,類簽名,以及非瞬態和非靜態欄位的值。