關於序列化Serializable

實現序列化的兩個原因:1、將對象的狀態保存在存儲媒體中以便可以在以後重新創建出完全相同的副本;2、按值將對象從一個應用程序域發送至另一個應用程序域。實現serializabel接口的作用是就是可以把對象存到字節流,然後可以恢復,所以你想如果你的對象沒實現序列化怎麼才能進行持久化和網絡傳輸呢,要持久化和網絡傳輸就得轉爲字節流,所以在分佈式應用中及設計數據持久化的場景中,你就得實現序列化。

  第二個問題,是不是每個實體bean都要實現序列化,答案其實還要回歸到第一個問題,那就是你的bean是否需要持久化存儲媒體中以及是否需要傳輸給另一個應用,沒有的話就不需要,例如我們利用fastjson將實體類轉化成json字符串時,並不涉及到轉化爲字節流,所以其實跟序列化沒有關係。

  第三個問題,有的時候並沒有實現序列化,依然可以持久化到數據庫。這個其實我們可以看看實體類中常用的數據類型,例如Date、String等等,它們已經實現了序列化,而一些基本類型,數據庫裏面有與之對應的數據結構,從我們的類聲明來看,我們沒有實現serializabel接口,其實是在聲明的各個不同變量的時候,由具體的數據類型幫助我們實現了序列化操作。

  另外需要注意的是,在NoSql數據庫中,並沒有與我們java基本類型對應的數據結構,所以在往nosql數據庫中存儲時,我們就必須將對象進行序列化,同時在網絡傳輸中我們要注意到兩個應用中javabean的serialVersionUID要保持一致,不然就不能正常的進行反序列化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章