1. 程式人生 > >為什麽對象序列化要定義serialVersionUID

為什麽對象序列化要定義serialVersionUID

serial 發生 ont long zab com spa version ati

對於實現了java.io.Serializable接口的實體類來說,往往都會手動聲明serialVersionUID,因為只要你實現了序列化,java自己就會默認給實體類加上一個serialVersionUID。

java默認添加的serialVersionUID是會根據實體類的成員(成員變量,成員方法)變化而變化的。

為什麽要顯示聲明一個serialVersionUID呢?

當我們把實體類序列化到本地後,如果實體類的成員發生了變化,默認添加的serialVersionUID就會發生變化。此時硬盤上序列化對象的serialVersionUID與實體類中的serialVersionUID對不上,就會反序列化失敗爆出異常:

Exception in thread “main” java.io.InvalidClassException: Person; local class incompatible: stream classdesc serialVersionUID = 8383901821872620925, local class serialVersionUID = -763618247875550322

所以,通常對於實現了SerialVersionUID接口的實體類來說,都會手動聲明serialVersionUID。

private static final long serialVersionUID = 1L;

通過上述代碼即可實現。

為什麽對象序列化要定義serialVersionUID