爲什麼在反序列化過程中從對象的類中移除變量不會拋出異常?序列化中的「不兼容」變化意味着什麼? 我也改變了從非靜態類到靜態類的領域,它根據Java Specifications爲什麼在反序列化過程中從對象的類中移除變量不會拋出異常?
是不兼容的。
爲什麼在反序列化過程中從對象的類中移除變量不會拋出異常?序列化中的「不兼容」變化意味着什麼? 我也改變了從非靜態類到靜態類的領域,它根據Java Specifications爲什麼在反序列化過程中從對象的類中移除變量不會拋出異常?
是不兼容的。
爲什麼在反序列化過程中從對象的類中移除變量不會引發Exception?
因爲它不應該。見Object Versioning Specification, #5.6.1:
「刪除字段 - 如果某個字段在一個類中刪除,寫入的數據流將不包含它的值當流由先前的課堂上閱讀,字段的值將被設置到默認值,因爲流中沒有可用的值,但是這個默認值可能會損害早期版本履行合同的能力。「
和
「更改非靜態字段,靜態或者非瞬態場瞬態 - 當默認序列化依賴,這種變化就相當於從類中刪除一個字段此版本的類。將不會將該數據寫入流中,因此它不會被早期版本的類讀取,因爲在刪除字段時,早期版本的字段將被初始化爲默認值,這會導致類以意想不到的方式失敗。「
什麼都沒有引發異常。
您嘗試序列化具有實例成員和嘗試與具有靜態成員的類定義反序列化對象? –
是的。這就是我所做的。 –
在反序列化過程中,我也刪除了一個沒有拋出異常的字段。 注意:我已經在我的班級中明確提到了一個串行版本UID。 –