为什么我们在java类中声明serialVersionUID?在普通的serialVersionUID类中声明的用途是什么?
class Simple
{
public static final long serialVersionUID=1L;
}发布于 2012-12-19 04:13:13
Java提供了一种称为对象序列化的机制,其中一个对象可以表示为一个字节序列,其中包括对象的数据以及关于对象类型和存储在对象中的数据类型的信息。
将序列化对象写入文件后,可以从文件中读取该对象并反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象。
serialization.htm
发布于 2012-12-19 04:28:03
serialVersionUID is for Serialization Purpose.
private static final long serialVersionUID = 1L;在没有serialVersionUID的情况下,有些时候得到了SerialzationException。参考java.io.Serializable
发布于 2012-12-19 05:08:38
您无法得到比java.io.Serializable文档更好的解释:
序列化运行库与每个可序列化的类关联一个名为serialVersionUID的版本号,该版本号在反序列化期间用于验证序列化对象的发送方和接收方是否为该对象加载了与序列化兼容的类。如果接收方为具有与相应发送方类不同的serialVersionUID的对象加载了类,则反序列化将导致InvalidClassException。可序列化的类可以显式声明自己的serialVersionUID,方法是声明一个名为"serialVersionUID“的字段,该字段必须是静态的、最终的和类型为long的: 任何-访问-修改静态最终长serialVersionUID =42 L; 如果可序列化类没有显式声明serialVersionUID,则序列化运行时将根据类的各个方面计算该类的默认serialVersionUID值,如对象描述的那样。但是,强烈建议所有可序列化的类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而有所不同,因此在反序列化过程中可能导致意外的InvalidClassExceptions。因此,为了在不同的java编译器实现之间保证一致的serialVersionUID值,可序列化类必须声明一个显式的serialVersionUID值。此外,还强烈建议显式serialVersionUID声明在可能的情况下使用私有修饰符,因为此类声明仅适用于立即声明类-序列化declarations字段作为继承成员使用。
https://stackoverflow.com/questions/13945362
复制相似问题