Java中实现Serializable接口为什么要声明serialVersionUID?
2015-09-24 15:04
363 查看
实现序列化接口Serialize的时候,如果不指定serialVersionUID 的值,编译时就会出现警告,为什么?
什么情况下需要修改serialVersionUID 的值?
序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致
InvalidClassException。可序列化类可以通过声明名为 "serialVersionUID" 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:
如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过,强烈建议所有可序列化类都显式声明
serialVersionUID 值,原因计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。
因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修改器显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于立即声明类
-- serialVersionUID 字段作为继承成员没有用处。
什么情况下需要修改serialVersionUID 的值?
序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致
InvalidClassException。可序列化类可以通过声明名为 "serialVersionUID" 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:
如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过,强烈建议所有可序列化类都显式声明
serialVersionUID 值,原因计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。
因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修改器显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于立即声明类
-- serialVersionUID 字段作为继承成员没有用处。
相关文章推荐
- UI - UIViewAndUILabel
- UVa 133 The Dole Queue
- Worst Performing Queries
- UIProgressView进度条方法总结
- 网页性能管理详解:浅谈chrome-Timeline及window.requestAnimationFrame()方法
- OpenStack: Perform Consistent Snapshots With Qemu Guest Agent
- 字符串0.在php和js中转换为布尔类型 值是false还是true
- iOS之UITableView
- setRequestedOrientation设置屏幕方向
- 如何使用xib自定义UITableViewCell
- Android UI设计
- 重写UITabBar 关键步骤小结
- 14-EMM Procedure 4. Service Request
- Android 异步查询框架AsyncQueryHandler的使用
- Number Sequence---hdu1711(kmp)
- UILabel UiButton 文字下面加下划线
- UILabel,UITextField 以及UIButton应用
- Liferay中request
- leetcode 95-96:Unique Binary Search Trees
- <s:checkbox> fieldValue取值问题