2021-05-10

什么是serialVersionUID,为什么要使用它?

序列化运行时与每个可序列化的类关联一个版本号,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送者和接收者是否已加载了该对象的与序列化兼容的类。如果接收者为该对象加载的类serialVersionUID与相应的发送者的类不同,则反序列化将导致 InvalidClassException。一个可序列化的类可以serialVersionUID通过声明一个serialVersionUID必须为static,final和type的字段来显式声明其自身long

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

如果可序列化的类未显式声明a serialVersionUID,则序列化运行时将根据serialVersionUID该类的各个方面为该类计算默认值,如Java™对象序列化规范中所述。但是,强烈建议所有可序列化的类显式声明serialVersionUID值,因为默认serialVersionUID计算对类详细信息高度敏感,而类详细信息可能会根据编译器的实现而有所不同,因此可能导致InvalidClassExceptions反序列化期间发生意外情况。因此,为了保证serialVersionUID不同Java编译器实现之间的值一致,可序列化的类必须声明一个显式serialVersionUID值。还强烈建议明确serialVersionUID声明在可能的情况下使用private修饰符,因为此类声明仅适用于立即声明的类-serialVersionUID字段作为继承成员没有用。

 

本文首发于java黑洞网,博客园同步更新

 









原文转载:http://www.shaoqun.com/a/731804.html

跨境电商:https://www.ikjzd.com/

美菜:https://www.ikjzd.com/w/1874

友家快递:https://www.ikjzd.com/w/1341


序列化运行时与每个可序列化的类关联一个版本号,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送者和接收者是否已加载了该对象的与序列化兼容的类。如果接收者为该对象加载的类serialVersionUID与相应的发送者的类不同,则反序列化将导致InvalidClassException。一个可序列化的类可以serialVersionUID通过声明一个serialV
贝贝网:https://www.ikjzd.com/w/1321
菜鸟网络:https://www.ikjzd.com/w/1547
史泰博办公用品:https://www.ikjzd.com/w/2112
晚上干的嫂嫂好爽特激烈 射在里面了嫂嫂 对不起:http://www.30bags.com/a/255245.html
亚马逊店铺运营—日常售后处理问题整理:https://www.ikjzd.com/tl/108014
托同事照顾老婆 谁知是引狼入室:http://lady.shaoqun.com/a/270300.html

No comments:

Post a Comment