1. 程式人生 > >第七十四條 謹慎地實現 serizable 介面

第七十四條 謹慎地實現 serizable 介面


我們把 String 或 八大基本型別的值儲存在記憶體,或儲存到本地file資料夾裡,或通過網路傳給服務端,比較容易;但我們自定義的 class 物件怎麼辦,他們直接儲存到本地,儲存不了他們的屬性的值,比如 class Student 物件,裡面 age 和 address 兩個屬性;有個物件 student,age 為 13,address 為 北京,我們想把student 的值直接儲存到資料庫或file文字中,不行。可以把它的屬性值拿出來,拼接成一個字串,然後儲存。有沒有辦法直接儲存物件值呢?答案就是序列化。

讓一個類實現序列化非常簡單,在它的宣告中加入 implements Serializable 即可,該類就可以被序列化了。由於一行程式碼就可以搞定了序列化,往往讓人覺得很容易,但,實現起來容易,開銷也不大,看似很美好,實際上後期維護的話費卻特別大。

序列化有以下幾個弊端:
一、實現序列化以後,一旦公開,類的可變性就降低了,沒那麼靈活了;
二、增加了出現bug和漏洞的可能,通過序列化實現讀取內容,可能會打破構造方法的限制;
三、隨著版本的髮型,後期測試工作會越來越大;

據某些資料顯示,由於 如序列化儲存安全、反序列化安全、傳輸安全等問題,大概至少三分之一的漏洞是由序列化引起的,所以我們自己在並非特別瞭解序列化的前提下,還是儘量避免使用它。目前有訊息說正在開發一個小型的序列化框架來代替老式的笨重的序列化方式,技術也是不停的更新的。在新的更成熟的技術出現之前,可以用其他方法來代替序列化的功能:我們可以把值用 String 的格式儲存,然後讀取,再解析為物件。