主要有兩個原因:
1、將對象的狀態保存在存儲媒體中以便可以在以後重新創建出完全相同的副本;
這個可以這麼理解:
比如,你要將某個特定的對象保存到文件中,然後隔幾天在把它拿出來用
2、按值將對象從一個應用程序域發送至另一個應用程序域。
這個可以這麼理解:
在進行Socket編程的時候,需要要傳輸某一類的對象,那麼也就要實現Serializable接口;最常見的你傳輸一個字符串或者類Date型的數據,它是JDK裏面的類,也實現了Serializable接口,所以可以在網絡上傳輸。 或者當你要去調用一個遠程對象,如在計算機A中調用另一台計算機B的對象的時,那麼你需要通過JNDI服務獲取計算機B目標對象的引用,將對象從B傳送到A,這個時候就需要實現序列化接口。
是否都要實現Serializable
不一定,主要就是看你的bean是否需要持久化存儲媒體中以及是否需要傳輸給另一個應用,沒有的話就不需要,例如我們利用fastjson將實體類轉化成json字符串時,並不涉及到轉化為字節流,所以其實跟序列化沒有關係。
附加問題:
有的時候並沒有實現序列化,依然可以持久化到數據庫。
這個其實我們可以看看實體類中常用的數據類型,例如Date、String等等,它們已經實現了序列化,而一些基本類型,數據庫裏面有與之對應的數據結構,從我們的類聲明來看,我們沒有實現serializabel接口,其實是在聲明的各個不同變量的時候,由具體的數據類型幫助我們實現了序列化操作。