Serializable 與 serialVersionUID

Serializable

Serializable是一個空接口攒菠,沒有什么具體內(nèi)容哨免,它的目的只是簡單的標識一個類的對象可以被序列化茎活。

什么情況下需要序列化:

  • 當你想把的內(nèi)存中的對象寫入到硬盤的時候;
  • 當你想用套接字在網(wǎng)絡(luò)上傳送對象的時候琢唾;
  • 當你想通過RMI傳輸對象的時候载荔,比如說你的內(nèi)存不夠用了,那計算機就要將內(nèi)存里面的一部分對象暫時的保存到硬盤中采桃,等到要用的時候再讀入到內(nèi)存中懒熙,硬盤的那部分存儲空間就是所謂的虛擬內(nèi)存。在比如過你要將某個特定的對象保存到文件中普办,我隔幾天在把它拿出來用工扎,那么這時候就要實現(xiàn)Serializable接口;

serialVersionUID

提到 serialVersionUID 就不得不提到 ObjectOutputStream 與 ObjectInputStream 衔蹲,因為僅當使用這兩個流對象時serialVersionUID才會起作用肢娘。

簡單來說,Java的序列化機制是通過類的serversionUID來驗證版本一致性的。在反序列化時橱健,JVM會將傳來的字節(jié)流中的serialVersionUID與本地相應(yīng)實體類的serialVersionUID進行比較而钞,如果相同就認為是一致的,可以進行反序列化拘荡,否則就會出現(xiàn)序列化版本不一致的異常臼节,即是InvalidCastException。


InvalidCastException 示例

serialVersionUID有三種常見的生成方案:

  1. 根據(jù)類名珊皿、接口名网缝、成員方法及屬性等來生成一個64位的哈希字段,比如:
    private static final long serialVersionUID = xxxL亮隙;
  2. 默認的1L途凫,比如:private static final long serialVersionUID = 1L;
  3. 完全隨機生成溢吻;

關(guān)于三種方案的解析:

  • 第一種方案:沒有手動聲明serialVersionUID時java的默認策略维费,serialVersionUID的默認值完全依賴于Java編譯器的實現(xiàn),對于同一個類促王,用不同的Java編譯器編譯犀盟,有可能會導(dǎo)致不同的serialVersionUID。
    通常如果Class文件(類名蝇狼、方法名等)沒有發(fā)生變化(增加空格阅畴、換行、增加注釋等等)迅耘,就算編譯多次贱枣,servialVersionUID也不會變化的。

  • 第二種方案:當場景沒有特殊要求時可以使用這種方案颤专。

  • 第三種方案:通常是為了保證序列化安全纽哥,假設(shè)serialVersionUID很容易被猜到,那么其他人就很容易反序列化該對象得到對象中保存的信息栖秕。所以當使用場景涉及到安全問題時春塌,我們盡量保證serialVersionUID隨機。

如果不想讓之前的版本參與當前版本的反序列化時可以通過改動serialVersionUID版本來實現(xiàn)簇捍。從而避免不同版本間的反序列化混亂只壳。(限于手動聲明serialVersionUID的方案)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市暑塑,隨后出現(xiàn)的幾起案子吼句,更是在濱河造成了極大的恐慌,老刑警劉巖事格,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惕艳,死亡現(xiàn)場離奇詭異况毅,居然都是意外死亡,警方通過查閱死者的電腦和手機尔艇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來么鹤,“玉大人终娃,你說我怎么就攤上這事≌籼穑” “怎么了棠耕?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柠新。 經(jīng)常有香客問我窍荧,道長,這世上最難降的妖魔是什么恨憎? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任蕊退,我火速辦了婚禮,結(jié)果婚禮上憔恳,老公的妹妹穿的比我還像新娘瓤荔。我一直安慰自己,他們只是感情好钥组,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布输硝。 她就那樣靜靜地躺著,像睡著了一般程梦。 火紅的嫁衣襯著肌膚如雪点把。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天屿附,我揣著相機與錄音郎逃,去河邊找鬼。 笑死拿撩,一個胖子當著我的面吹牛衣厘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播压恒,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼影暴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了探赫?” 一聲冷哼從身側(cè)響起型宙,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伦吠,沒想到半個月后妆兑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魂拦,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年搁嗓,在試婚紗的時候發(fā)現(xiàn)自己被綠了芯勘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腺逛,死狀恐怖荷愕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棍矛,我是刑警寧澤安疗,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站够委,受9級特大地震影響荐类,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茁帽,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一玉罐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脐雪,春花似錦厌小、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脂信,卻和暖如春癣蟋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狰闪。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工疯搅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埋泵。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓幔欧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親丽声。 傳聞我的和親對象是個殘疾皇子礁蔗,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容