Serializable:serialVersionUID
2015-07-08 10:05
183 查看
序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。
可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过,强烈建议 所有可序列化类都显式声明 serialVersionUID 值,原因是计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修饰符显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于直接声明类 – serialVersionUID 字段作为继承成员没有用处。
这段是从api文档copy过来的,黑体的部分,是我认为需要关注的几个点。
可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过,强烈建议 所有可序列化类都显式声明 serialVersionUID 值,原因是计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修饰符显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于直接声明类 – serialVersionUID 字段作为继承成员没有用处。
这段是从api文档copy过来的,黑体的部分,是我认为需要关注的几个点。
相关文章推荐
- Android中的UID和PID意义,及查看方式
- setuid() 和 setgid()函数浅析
- 如何获得所有android应用程序UID
- Ubuntu关于UID的更改
- CNU/Linux 用户管理【UID和GID】的一些笔记
- Linux的账号和用户组
- Android Uid和Pid区别。
- linux使用find命令找到文件所有者不是root的方法
- RHEL6基础之十二RHEL用户和组基础 推荐
- EBB-4、忘记root密码;文件,目录权限
- linux用户标识UID与有效用户标识EUID
- linux之档案基本权限、隐藏权限、特殊权限set uid、set gid、sticky
- Linux基础:文件属性和权限
- 两个简单的用来显示当前主机下uid和gid大于500的帐户信息的script
- RHEL 5基础篇—管理用户和组
- 更改用户uid
- sudo: /usr/lib/sudo/sudoers.so must be owned by...
- RHEL6入门系列之十四,用户和组的基本知识
- Linux特殊权限set_uid、set_gid、stick_bit命令和软链接文件、硬连接文件
- set_uid、set_gid、stick_bit、硬链接、软连接