博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
serialVersionUID要注意以下几点:
阅读量:6036 次
发布时间:2019-06-20

本文共 1440 字,大约阅读时间需要 4 分钟。

 

今天在使用eclipse开发的时候,遇到一个warning,看到warning我总觉得不爽,使用自动修复后,发现eclipse在代码中加入了“private static final long serialVersionUID = 1L;”。其实之前就遇过这种情况了,只是没有去了解,于是今天我就查了一下serialVersionUID 这个变量的信息。

原来serialVersionUID是可序列化类的一个版本标识,在反序列化的时候使用这个标识的值来判断序列化和反序列化的对象类型是否一致。Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常()。当你一个类实现了Serializable接口,如果没有定义serialVersionUIDEclipse会提供这个提示功能告诉你去定义之。 Eclipse中有两种生成方式:

一个是默认的1L,比如:“private static final long serialVersionUID = 1L;"

一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:“private static final long serialVersionUID = -8940196742313994740L;”。

使用serialVersionUID要注意以下几点:

1.当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本中未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。 

2.记住应该总是在可序列化的类中包含这个字段,即使是在第一个类版本中,以便提醒自己这个字段的重要性。不要在未来的版本中改变这个字段值,除非你有意要改变类使其与旧的序列化对象不兼容。

3.如果你的类序列化到硬盘上面后,你更改了类别的field(增加或减少或改名),当你反序列化时,就会出现异常的,这样就会造成不兼容性的问题。但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,这个可以避开不兼容性的问题。 

4.当我们的系统不太经常需要序列化类时,可以去掉这些警告,做如下设置:Window-->Preferences-->Java,将serializable class without serialVersionUID的设置由warning改为Ignore。然后Eclipse会重新编译程序,那些警告信息也就消失了。但如果在开发大量需要序列化的类的时候,建议还原为原来的设置。这样可以保证系统的性能和健壮。

5.更多关于可序列化对象的版本控制问题,看这里:

 

 

转载地址:http://qflhx.baihongyu.com/

你可能感兴趣的文章
Python 设置系统默认编码以及其他编码问题大全
查看>>
安装Hadoop集群注意事项
查看>>
git push 报错 remote: error: hook declined to update
查看>>
网页音频播放器和视频播放器插件收藏
查看>>
7.4 Spring MVC提供的更多功能
查看>>
Java常用设计模式总结
查看>>
keyboard rock
查看>>
Linux 6RD HOWTO
查看>>
探索与回溯算法
查看>>
dubbo 之remotting (1)
查看>>
递归转换数组或字符串的编码格式
查看>>
ThreadPoolExecutor里面4种拒绝策略
查看>>
chmod命令、chown命令、chgrp命令、umask命令、chattr命令、lsattr命令
查看>>
LNMP环境安装WordPress
查看>>
硬盘故障修复
查看>>
Java几款性能分析工具的对比
查看>>
jsp url传参加密
查看>>
订阅-发布模型
查看>>
Android Dalvik虚拟机和ART虚拟机对比
查看>>
vue笔记 $set的正确用法
查看>>