java在序列化的时候涉及到很多检查,serialVersionUID就是其中一个。
那这个serialVersionUID有什么用处?
这个值可以由类指定,也可以不指定。如果不指定的话java会根据class计算serialVersionUID,相当于hash的原理(但不是hash不要混淆),只要类没有变化,计算出来的serialVersionUID也会变化。
它用在反序列化的时候“检查”当前的类是不是已经被修改过。如果发现serialVersionUID对不上号,那么会抛出 java.io.InvalidClassException的异常,这种情况发生在由于种种因素修改了序列化对象的类文件时。
但是有时候我们有这样的需求,将A类对象序列化之后,版本升级,修改了A类,这时候,希望反序列化的时候还能认识之前版本的序列化对象。这时候serialVersionUID就在笑了,对,只要指定序列化对象类的serialVersionUID就可以了。
指定了序列化对象的serialVersionUID,即使你删除了类的某个成员变量,其他未修改信息仍然能正确解析,对他就是这么变态。
ps: 介绍下我的使用场景:我需要持久一些动态的配置,在每次修改之后,我都会将新的配置持久化到文件中。但是不想使用xml文件,虽然易懂,但是对我系统来说没有必要,我这个配置我是提供用户在页面上直接配置的,不需要打开XML文件来写(容易出错,还需要重启应用)。我现在的做法就是就配置文件写成一个类,配置项就是类中的成员变量,这样新加配置文件直接内存中分配一个配置对象,然后将次对象序列化到文件中,但是考虑到配置项可能会增加,但是我需要在配置类新加了配置项之后,之前的数据文件仍然能读取,于是就有了上面的尝试。
分享到:
相关推荐
全面解析了java中serialVersionUID的作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Java中serialVersionUID的解释,对于版本的说明解释问题
序列化版本号serialVersionUID的作用_动力节点Java学院整理.
本篇文章主要介绍了详述IntelliJ IDEA 中自动生成 serialVersionUID 的方法(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
主要介绍了java类中serialVersionUID的作用及其使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1、serialVersionUID作用, 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 2、Servlet中service()方法 3、servlet中的doGet和doPost的不同 4、……
三期第一张IO笔记 6
以下是对Java中的serialVersionUID进行了全面的分析介绍。需要的朋友可以过来参考下
主要介绍了idea如何自动生成serialVersionUID,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
【强制】序列化类新增属性时,请不要修改 serialVersionUID 字段,避免反序列失败; 如果 完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值。 说明:注意 serialVersionUID 不一致会抛出序列化...
NULL 博文链接:https://jnh.iteye.com/blog/1300193
主要介绍了java序列化和serialVersionUID的使用方法实例的相关资料,这里说明很详细的使用方法让你彻底学会,需要的朋友可以参考下
614.612.JAVA基础教程_IO流与网络编程-serialVersionUID的理解(614).rar
eclipse序列号生成器,方便大家在使用eclipse的时间生成序列号用。
1.serialVersionUID-->适用于Java的序列化机制: 2.具体化序列化过程: 3.serialVersionUID有两种显示的生成方式:
想法生成SerialVersionUID
private static final long serialVersionUID = 1L; public static JButton bt3 = new JButton("修改"); public static JButton bt4 = new JButton("取消"); public static JLabel lb2 = new JLabel("收入 元"); ...
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, ...