Java中的序列化tips

序列化Serializable

作用

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

2.反序列化後的對象還可以保存到硬盤上。

實現方式

1.實現Serializable接口。

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,刪除的字段不設置。

3.如果我們不想兼容不同版本,我們還可以爲不同的版本再設置一個版本號。在序列化和反序列化的過程中(自定義序列化),我們還可以根據版本號來選擇性的序列化那些變化的屬性的狀態。

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

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

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