serialversionuid介绍
再编程过程中当涉及到对象的传输问题时,我们会采用序列化的技术,通过序列化可以将对象的状态信息转换为可以存储或传输的形式的过程。在java当中我们可以通过实现serializable接口来序列化对象,而serialversionuid就是java序列化机制中一个不可或缺的角色,可以通过在运行时判断类的serialversionuid来验证版本一致性。在进行反序列化时,jvm会把传来的字节流中的serialversionuid与本地相应实体(类)的serialversionuid进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
当我们用 intellij idea 编写类并实现 serializable(序列化)接口的时候,可能会遇到这样一个问题,那就是:
无法自动生成serialversionuid.
而serialversionuid
又是一个非常重要的字段,因为 java 的序列化机制是通过在运行时判断类的serialversionuid
来验证版本一致性的。在进行反序列化时,jvm 会把传来的字节流中的serialversionuid
与本地相应实体(类)的serialversionuid
进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
一般来说,定义serialversionuid
的方式有两种,分别为:
-
采用默认的
1l
,具体为private static final long serialversionuid = 1l;
-
根据类名、接口名、成员方法及属性等来生成一个
64
位的哈希字段,例如private static final long serialversionuid = xxxl;
而 java 类进行序列化也两个主要目的,分别为:
- 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
- 在网络上传送对象的字节序列。
在这里,我们就一起来看看如何利用 intellij idea 自动生成serialversionuid
.
第 1 步:安装generateserialversionuid插件
如上图所示,点击preferences
,进入如下界面:
在这里,选择plugins
,并搜索generateserialversionuid
,如果没有发现此插件,则可以点击search in repositories
进行搜索:
如上图所示,点击install
,即可安装此插件。
第 2 步:设置inspections功能
如上图所示,进入default settings
,在inspections
设置页面中,勾选serializable class without 'serialversionuid'
,并且还可以在severity
中设置提示级别,如warning
、error
等,默认为warning
,也建议选择warning
级别的提示。
如上图所示,创建一个类并实现serializable
接口,然后按alt
+enter
键,即可收到提示,然后选择serialversionuid
:
如上图所示,显然我们已经利用 intellij idea 中自动生成serialversionuid
啦!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/qq_35246620/article/details/77686098