Java技巧 序列化的兩種方式

2021-05-01 16:31:06 字數 1149 閱讀 9087

大家都知道serializable是乙個mark inte***ce,告訴jvm這個物件可以被轉換成二進位製流來傳輸.

serializable 在我們實現這個介面的時候,我們可以使用4個私有方法來控制序列化的過程: 

我們來看乙個例子:

我們執行這段**看到的debug資訊:

writereplace invoked

writeobject invoked

readobject invoked

readresolve invoked

當進行序列化的時候:

首先jvm會先呼叫writereplace方法,在這個階段,我們可以進行張冠李戴,將需要進行序列化的物件換成我們指定的物件.

跟著jvm將呼叫writeobject方法,來將物件中的屬性乙個個進行序列化,我們可以在這個方法中控制住哪些屬性需要序列化.

當反序列化的時候:

jvm會呼叫readobject方法,將我們剛剛在writeobject方法序列化好的屬性,反序列化回來.

然後在readresolve方法中,我們也可以指定jvm返回我們特定的物件(不是剛剛序列化回來的物件).

externalizable

是乙個有實際方法需要實現的inte***ce,包括writeexternal和readexternal,是serializable介面的子介面:

我們執行這段**看到的debug資訊:

writereplace invoked

writeexternal invoked

readexternal invoked

readresolve invoked

在此writeexternal 和readexternal 的作用與writeobject和readobject 一樣.

最後,當我們同時實現了兩個inte***ce的時候,jvm只執行

externalizable

介面裡面的writeexternal 和readexternal 方法對序列化內容進行處理.

需要注意的是:serializable是乙個真正的mark inte***ce,

writeobject,readobject, writereplace,readresolve是直接與jvm通訊,告訴jvm序列化的內容.

序列化資料的兩種方式

序列化def 序列化2,不支援datetime json不能序列化queryset型別,需要用values進行轉換成列表 json不支援datetime類ing,需要我們新增新功能 import json from datetime import date from datetime import ...

C Json反序列化的兩種簡單實用方法

前言 看到很多c s模式 在給客戶傳送資料時都是以json格式實現的,於是寫了兩種反序列化json格式的方法,方便使用者自行處理關鍵資料。1 winform設計 拖控制項很簡單,就不花時間了 2 新增引用 解決方案 右擊 引用 新增引用 net system.web.extensions 確定 在命...

java分頁的兩種方式

方式其實都非常的簡單,一種是資料庫分頁用limit限制取出條數,一種是在業務邏輯裡面分頁,我用的是jdbc,所以每次游標指定到一定的條數進行展示。因為只是簡單的進行原理學習,所以並沒有對 方面對嚴格的書寫,明白原理就好。主要的地方就是在進行資料庫查詢的時候,假設有一張表flownode,sql語句如...