那些關於Java序列化的一些事

什麼是序列化

我們的對象並不只是存在內存中,還需要傳輸網絡,或者保存起來下次再加載出來用,所以需要Java序列化技術。

Java序列化技術正是將對象轉變成一串由二進制字節組成的數組,可以通過將二進制數據保存到磁盤或者傳輸網絡,磁盤或者網絡接收者可以在對象的屬類的模板上來反序列化類的對象,達到對象持久化的目的。

那些關於Java序列化的一些事

序列化允許重構

序列化允許一定數量的類變種,甚至重構之後也是如此,ObjectInputStream 仍可以很好地將其讀出來。

Java Object Serialization 規範可以自動管理的關鍵任務是:

將新字段添加到類中

將字段從 static 改為非 static

將字段從 transient 改為非 transient

取決於所需的向後兼容程度,轉換字段形式(從非 static 轉換為 static 或從非 transient 轉換為 transient)或者刪除字段需要額外的消息傳遞。

那些關於Java序列化的一些事

類添加序列化接口

import

java

.

io

.

Serializable

;

public

class

User

implements

Serializable

{

private

static

final

long

serialVersionUID

=

-

8475669200846811112L

;

private

String

username

;

private

String

address

;

public

String

getUsername

()

{

return

username

;

}

public

void

setUsername

(

String

username

)

{

this

.

username

=

username

;

}

public

String

getAddress

()

{

return

address

;

}

public

void

setAddress

(

String

address

)

{

this

.

address

=

address

;

}

@Override

public

String

toString

()

{

return

"User{"

+

"username='"

+

username

+

'\''

+

", address='"

+

address

+

'\''

+

'}'

;

}

}

信任,但要驗證

認為序列化流中的數據總是與最初寫到流中的數據一致,這沒有問題。但是,正如一位美國前總統所說的,“信任,但要驗證”。

那些關於Java序列化的一些事

對於序列化的對象,這意味著驗證字段,以確保在反序列化之後它們仍具有正確的值,“以防萬一”。為此,可以實現 ObjectInputValidation接口,並覆蓋 validateObject() 方法。如果調用該方法時發現某處有錯誤,則拋出一個 InvalidObjectException。

總結:

1)Java序列化就是把對象轉換成字節序列,而Java反序列化就是把字節序列還原成Java對象。

2)採用Java序列化與反序列化技術,一是可以實現數據的持久化,在MVC模式中很是有用;二是可以對象數據的遠程通信。

尚學堂12大精英團隊+各類實戰項目,真正實現1+1>10的目標效果。幫助學員迅速成長,持久騰飛,成就學員“高富帥”人生;幫助企業技術和團隊成長,成就百年中華名企;助力中國持續成為世界強國而貢獻力量。尚學堂12大精英團隊,覆蓋IT行業十大領域,實戰團隊240人,服務學員累計超過10萬人,就業合作企業數量500+。


分享到:


相關文章: