今天突然接到淘寶的電話面試,問了一些問題,其中一個是關于Java序列化的
問題大概就是serialVersionUID的作用之類的吧,當時回答是憑感覺和經驗回答的,后來通過測試,我的回答是正確的,這里再總結下序列化的問題
1.Java的序列化機制只序列化對象的屬性值,而不會去序列化什么所謂的方法,列化機制只保存對象的類型信息,屬性的類型信息和屬性值,和方法沒有什么關系,你就是給這個類增加10000個方法,序列化內容也不會增加任何東西。
2.對于需要序列化和反序列化的的實體,最好加上serialVersionUID,并不要隨便更改其值。
?????? 對于一個實體User好啦,實現了java.io.Serializable接口,但沒有加上serialVersionUID,先實例化一個User對象并將它序列化到磁盤上,然后再反序列化,OK,這是沒有問題的!看下面的:
?????? 在User類里再增加一個屬性,接著再將之前序列化的文件反序列化成User對象,報錯!!!為何?就是因為沒有加上serialVersionUID!
?????? 如果User加上了serialVersionUID,給User增加屬性后,再將之前序列化的文件反序列化回User對象,是沒有問題的!!
3.總結
?????? serialVersionUID 用來表明類的不同版本間的兼容性。如果你修改了此類, 要修改此值。否則以前用老版本的類序列化的類恢復時會出錯。為了在反序列化時,確保類版本的兼容性,最好在每個要序列化的類中加入private static final long serialVersionUID這個屬性,具體數值自己定義。