Java中的序列化tips

序列化Serializable

做用 java

1.當2個進程在進行遠程通訊時,相互發送數據,數據都是以二進制的形式傳送的。若是咱們要傳輸對象的話,就須要把對象轉化爲字節數組(二進制數據),接收方接收後反序列成對象。目的在於,傳送對象的狀態,也就是屬性值spring

2.反序列化後的對象還能夠保存到硬盤上。數組

實現方式mvc

1.實現Serializable接口。code

2.實現Serializable接口,並增長void writeObject(ObjectOutputStream out) throws IOExceptionvoid readObject(ObjectInputStream in) throws IOException, ClassNotFoundException這2個方法來自定義某些屬性的序列化。對象

3.實現Externalizable接口(該接口繼承自Serializable接口),並重寫writeExternamereadExternal方法來徹底自定義要序列化的屬性。繼承

顯式定義serialVersionUID屬性的做用接口

1.對於一個要進行序列化的類,咱們但願類的不一樣版本對序列化兼容(這個類可能前先後後對字段進行刪改),若是不顯式設置id,這個類的每一個版本的id(由系統生成)都是不同的。那麼反序列化的時候,永遠只能反序列化最新的實例了(舊的實例由於id不一致將失敗)。進程

2.因此要保證兼容的話,就須要設置一個顯式的id。那麼在序列化舊的實例時,新添加的或更改的字段會被設置爲null,刪除的字段不設置。it

3.若是咱們不想兼容不一樣版本,咱們還能夠爲不一樣的版本再設置一個版本號。在序列化和反序列化的過程當中(自定義序列化),咱們還能夠根據版本號來選擇性的序列化那些變化的屬性的狀態。

在springmvc裏,javabean都要實現Serializable接口,並生成顯式id

其目的就是咱們上面分析的序列化的做用以及顯式id的做用,特別是在遠程服務調用的項目中。

相關文章
相關標籤/搜索