首頁 >Java >java教程 >什麼是序列化?序列化的具體介紹

什麼是序列化?序列化的具體介紹

PHP中文网
PHP中文网原創
2017-06-20 14:25:493095瀏覽

一 序列化

1.什麼是序列化?

將記憶體中的物件寫入到硬碟中就是序列化,與一般輸出並無區別,只是輸出的資料是對象,不是一般的文字。

2.序列化的作用

因為資料在記憶體中的儲存是暫時的,如果需要長久保存對象,必須把對象寫入硬碟,就產生了序列化。

3.序列化的條件

一個物件要想被序號,該物件所屬的類別必須實作Serializable接口,該接口是一個標誌性接口,無任何字段與抽象方法,JVM遇到該接口將為該類別分配一個序列化版本號。

4.一個物件被序列化,該物件中的全域變數包含private類型的變數都會被寫入硬碟。

5.不能被序列化的欄位:

  1. #靜態欄位不能被序列化,靜態變數的值是目前JVM中的值,不是序列化時所設定的值。

  2. 被transient修飾的欄位不能被序列化。

6.序列化運算:

#
OutputStream ops=new FileOuptStream(path);
ObjectOuptStream oos=new ObjectOutputStream(ops);
Object obj=new Ojbect();
oos.writeObject(obj);

 

二反序列化

1.什麼是反序列化

#反序列化就是將硬碟中的資料寫入內存,取得保存在文件中的物件。

2.反序列化運算需求

反序列化的順序必須與序列化的順序一致。

3.序列化版本號

⑴序列化時會產生一個long類別數字,並稱為序列化版本號,同時儲存在序列化文件與類別文件中,反序列化時對比兩個數字,如果相同,則序列化成功;不相同,則無法反序列化。

⑵序列化版本號用來標註實體類別的版本,實體類別一旦修改,如果未明確地指定序列化版本號,系統自動生成一個新的版本號,這樣兩個版本號不同,無法序列化。 一般在需要序列化的實體類別中明確地設定序列化版本號。

⑶不是重新編譯不一定會產生一個新的序列化版本號,只有實體類別發生了改變才會產生新的序列化版本號。

⑷解析過程

反序列化時首先對比序列化檔案與類別檔案中的序列化版本號是否相同,如果相同,表明該序列化文件是由當前類文件生成的,可以反序列哈;不相同,表示不是由當前類文件生成的,版本不一致,無法反序列化。

⑸反序列運算:

InputStream is=new FileInputStream(path);
ObjectInputStream ois=new ObjectIputStream(is);
Object obj=ois.readObject();

 

以上是什麼是序列化?序列化的具體介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn