1. 程式人生 > >關於Java Serial Version UID的一些說明

關於Java Serial Version UID的一些說明

生成 有變 文件 需要 java se 實現 private gen java對象

在網絡傳輸Java對象、將Java對象存儲到文件、將Java對象以BLOB形式存儲到數據庫中時,需要對Java對象進行序列化及反序列化,標準模式是實現Serializable接口。
實現上述接口時,需要提供一個Serial Version UID,該UID用於標識類的版本。一個對象被序列化後,只要其版本不變,都可以進行反序列化,一旦
改變造成版本不一致,會拋出InvalidClassException異常。
建議顯示定義UID,如果不顯示定義,JVM會自動產生一個值,這個值和編譯器的實現有關,不穩定,可能在不同JVM環境下出現反序列化拋出InvalidClassException異常的情況。
在Eclipse中,提供兩種方式顯示定義UID,一種是“add default serial version ID”,默認值為1L;另一種是“add generated serial version ID”,默認值是一個很大的數,是根據
類的具體屬性而生成,當類屬性有變動時,該值會更改。
建議采用第一種自動生成方法,當對類進行了不兼容性修改時,需要修改UID。
采用第二種方法時,如果修改了屬性,不重新生成UID時,默認值是不會變的,也可以正常反序列化,但不推薦,畢竟UID的值與實際不符。
對類進行兼容性和不兼容性修改的情況請參見以下url:http://docs.oracle.com/javase/7/docs/platform/serialization/spec/version.html。
Hibernate的pojo類建議也采用上述方法,便於擴展。
對於繼承關系,父類實現序列化接口,子類可以繼承接口的實現,但需顯示定義UID,因為父類UID類型為private static,不可被繼承,同時子類作為單獨的類需要單獨的UID。

關於Java Serial Version UID的一些說明