文档章节

Serializable的serialVersionUID作用

H
 Henrykin
发布于 2017/03/27 08:26
字数 374
阅读 31
收藏 0

当对象需要存到硬盘、传输到网络等特殊要求下,就需要用到Serializable。而类实现Serializable时会提示我们显示创建一个serialVersionUID的属性,就算我们不显示创建,虚拟机也会隐式创建。这个属性作用主要是标记类的版本号,即类有没有被修改过。假如版本号不同,是不能实现反序列化的。

有以下情况:

1、版本号相同,但是修改了类(增加或删除了属性),可以反序列化。增加的属性被设置为默认值(基本类型为默认值,引用类型为null)。删除的属性的那部分数据因为目前没有属性与它匹配,所以丢弃这部分数据。

2、版本号不同,无论修 不修改类。都不能反序列化,报错java.io.InvalidClassException

需要注意的是:

如果我们没有显示创建serialVersionUID,然后序列化后,又修改了类,那么虚拟机会再次帮我们创建serialVersionUID,和之前隐式创建的是不一样的。此时就会出现反序列化失败的问题。而且只要修改了类,虚拟机就会创建新的serialVersionUID,除非serialVersionUID是你自己显示创建的。

这就是为什么我们有时候需要自己显示创建serialVersionUID。只要我们不去修改自己创建的serialVersionUID,就算修改了类,也还是可以反序列化的。

© 著作权归作者所有

H
粉丝 4
博文 102
码字总数 12788
作品 0
广州
私信 提问
serialVersionUID的作用

简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersion...

ok绷forever
2016/07/13
21
0
Java中serialVersionUID的解释

serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 有两种生成方式: 一个是默认的1L,比如:private static final long serialVersionUI...

Mr&Cheng
2013/03/15
153
0
the serializable class drawline does not declar...

Java运行时出现”the serializable class drawline does not declare a static final serialversio”是什么原因,如何解决 可序列化的类 CreateBPOVIEW 未声明类型为 long 的静态终态 serial...

jpch
2013/08/30
39
0
异常警告The serializable class * does not declare a static final serialVersionUID

一、提示信息: 二、出现原因: 当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个提示功能告诉你去定义。 三、serialVersionUID作用: 序列化时为了保持...

为了美好的明天
2018/01/11
552
0
定义serialVersionUID的作用与意义整理

实现java.io.Serializable这个接口是为序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。 ...

吞吞吐吐的
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样在磁盘上查找MySQL表的大小?这里有答案

导读 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎...

问题终结者
37分钟前
6
0
jQuery load() 方法实现加载远程数据

jQuery load() 方法是简单但强大的 AJAX 方法。load() 方法从服务器加载数据,并把返回的数据放入被选元素中。 语法: $(selector).load(URL,data,callback);必需的 URL 参数规定您希望加载的...

前端老手
38分钟前
5
0
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override@Cacheable(value = "people#${s...

xiaolyuh
46分钟前
9
0
怎样在磁盘上查找MySQL表的大小?这里有答案

我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应...

Linux就该这么学
今天
5
0
Redis

一、Redis支持的几种数据类型:字符串、List、SET、HASH、ZSET 二、Redis的缓存技术主要是为了降低关系数据库的负载并减少网站成本 三、在Redis里面,被MULTI命令和EXEC命令包围的所有命令会...

BobwithB
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部