java 中Serializable存在的意義是什麼?

時間 2021-05-30 14:04:24

1樓:C加加程式設計思想

高讚確實有道理,restful架構下,json和xml會成為傳輸和持久化的主流。

但是至少有下面幾個地方我們還是需要Serializable介面。

1、Serializable是乙個標記。這個介面告訴JVM哪些物件可以變成byte,哪些不行。繼承介面可以幫助開發者更好地管理這些物件,以免出現你不想讓它序列化但它還是被序列化的問題。

類似的空介面還有Remote和Cloneable。

2、父類與序列化。如果沒有這個介面,那麼序列化子類的時候,父類的變數要怎麼辦呢。當然你可以把對父類變數的修改寫進無參建構函式裡或者宣告的時候就賦值,可是如果例項化之後發生了改變,這個改變的值我是序列化呢還是不序列化呢?

加上Serializable介面就可以解決這個問題了。

3、UID。通過serialVersionUID,我們就可以做到序列化和反序列化的一致性,也可以防止某些序列化之後的結果再反序列化回來。

4、這一點是我個人的想法,我認為JVM在序列化時,一定做了很多自己的優化,比如序列化兩遍同乙個物件,磁碟上的檔案大小並不會乘2。同樣的反序列化的時候也很方便。

json由於和語言無關確實更方便,不過具體專案中還是要考量實際物件序列化之後的大小以及還原成物件的速度。

2樓:summer飛飛

:報告計算機:說

:我要序列化(我要存硬碟)

計算機:暗號

:Serializable

計算機:嗯,通過

——————可以通過session試試,物件實現介面或者不實現介面,把伺服器關閉再啟動感受一下session能否讀取物件

3樓:二手java

他只是乙個標示,你可以到這個介面類裡面去看一下,壓根沒有處理,他是乙個宣告表示,真正做序列化處理的是jvm虛擬機器,就像乙個班級老師管理處理問題,當你遇到問題你舉手,老師過來處理,你實現這個介面的就相當於舉手的動作,老師相當於是虛擬機器,處理問題的不是你是老師,做序列化的不是實現類也不是藉口而是虛擬機器

Java中List String a new List 10 這種寫法的元素型別是List嗎?

代林 首先,Number b new Integer 10 並不是建立了乙個value 10的Integer,而是建立了乙個陣列,這個陣列的長度的10,且理論上只能儲存Integer。想要建立乙個value 10的Integer應該是用Number b new Integer 10 同理,List ...

關於Java中的ConcurrentHashMap的實現原理有大神可以詳細介紹下嗎?

meteor the張 1.7陣列 hashmap,cas rentrantlock 分段鎖1.8陣列 鍊錶 紅黑樹,synchronized cas 優化版的hashmap luoxn28 可以看下這個 mmwx 沒人講1.8版,那我來講講吧。1.8版本相比1.7版本,沒有了分段鎖的概念,轉而使用...

Java 中iterator和iterable的關係是怎樣的?有何意義?

黃美英 乙個是迭代方法介面,乙個是迭代器 類 介面。迭代方法Iterator 實現hasNext 和 next 就這倆方法,其他啥也沒了。迭代器介面iterable 負責持續返回可以實現迭代方法的乙個類,有個這個類,自然可以且必須實現迭代方法。當乙個集合想要遍歷,你是需要迭代方法呢?還是持續返回乙個...