关于Java Serial Version UID的一些说明

Posted 不停地朝前走

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java Serial Version UID的一些说明相关的知识,希望对你有一定的参考价值。

 

   在网络传输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的一些说明的主要内容,如果未能解决你的问题,请参考以下文章

关于java version我真是醉了

java -version,关于三个不同结果行的问题

我们如何在 Android Java 的 RecyclerView 中检索 uid 用户名和 uid 用户子值?

java.lang.SecurityException:发送短信:uid 10051 没有 android.permission.SEND_SMS [重复]

关于 MicroPython 的软串口 software-serial,要不要也移植到 K210 micropython 里呢?

关于Arduino Due开发板在Arduino IDE串口打印问题解决(附Serial函数整理)