implements Serializable
implements Serializable
1. 序列化和反序列化
序列化: 把对象转换为字节序列的过程称为对象的序列化.
反序列化: 把字节序列恢复为对象的过程称为对象的反序列化.
- 在Java和其他语言进行通信的时候, 需要将对象转化成一种通用的格式例如Json( 转换成大家都认识的对象 ), 从对象都Json字符串的转换就是序列化的过程, 反过来, 从Json字符串转换成Java对象就是反序列化的过程.
- 在Java需要把一个对象的状态保存到文件或者是数据库的时候, 就是数据存取的过程中的中间过程.
2. 为什么要显示声明serialVersionUID
serialVersionUID
的作用是验证序列化和反序列化的过程中, 对象是否保持一致. 所以在一般情况下我们需要显示的声明serialVersionUID. 如果接受者加载的该对象的类的serialVersionUID
和发送者的类版本号不同的话, 反序列化会爆出InvalidClassException
错误.
什么时候会导致爆出这个错误呢? 例如在没有显示声明版本号的时候, 先将对象进行了序列化; 然后不管出于什么目的, 该对象的类被修改了, 哪怕仅仅是添加了一个强制转换, 或者将一个public的属性给私有化了, 都会影响版本号. 此时在这个环境下用反序列化的方法读取以前序列化之后存储起来的对象是会报错的.
3. 为什么序列化值不用1L
记得很久以前看的资料, 现在在网上找没找到可以参考的. 下面写的东西 是我自己以前看到的, 并且自认为正确的.
serialVersionUID是根据类名,接口名,方法名,成员属性以及他们的修饰符生成的唯一ID, 在反序列化的时候会使用ID作为一个判断条件去寻找并验证类, 如果serialVersionUID都是一样的1L
的话会降低反序列化的速度.
implements Serializable的更多相关文章
- 为什么很多类甚者底层源码要implements Serializable ?
为什么很多类甚者底层源码要implements Serializable ? 在碰到异常类RuntimeException时,发现Throwable实现了 Serializable,还有我们平进的ja ...
- javaBean为什么要implements Serializable
转自:https://www.cnblogs.com/jqlbj/p/6261592.html 一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的.因此如果要序 ...
- implements Serializable有什么作用?
没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用.serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序 ...
- java 输入输出 对象序列化implements Serializable与反序列化:ObjectOutputStream.writeObject() ;objectInputStream.readObject() ;serialVersionUID字段注意
对象序列化 对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象.对象序列化机制允许把内存中的 Java 对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将 ...
- implements Serializable有什么作用
转自 http://blog.csdn.net/dinghqalex/article/details/46009911
- java.io.Serializable 序列化接口
什么是序列化.反序列化? Serialization(序列化)是一种将对象以一连串的字节描述的过程: 反序列化deserialization是一种将这些字节重建成一个对象的过程. 序列化通俗一点说就是 ...
- serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法
ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...
- Java Serializable系列化与反系列化
[引言] 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接 ...
- 在Activity之间传递参数(三)——serializable和parcelable的区别
传递值对象: 一.serializable实现:简单易用 serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可.Serializable 接口是一种 ...
随机推荐
- npm install、npm install --save与npm install --save-dev、npm install -g区别
npm install X: 会把X包安装到node_modules目录中 不会修改package.json 之后运行npm install命令时,不会自动安装X npm install X –sav ...
- java递归树形菜单显示
今天写权限整好涉及到一些菜单的显示,最先想到的是递归遍历输出,但是呢在网上找了很多有关的资料没有符合自己需求的所以就自己写了一个,如果觉得靠谱 请点点关注!!!赞一个 首先看一些设计的数据库设计 菜单 ...
- Ajax上传数据和上传文件(三种方式)
Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式) <!DOCTYPE html> <html la ...
- HTTP/1.1 与 HTTP/2.0
HTTP/1.1 与 HTTP/2.0 HTTP/1.1 持久连接 非持久连接
- 轻装上阵Flink--在IDEA上开发基于Flink的实时数据流程序
前言 本文介绍如何在IDEA上快速开发基于Flink框架的DataStream程序.先直接上手! 环境清单 案例是在win7运行.安装VirtualBox,在VirtualBox上安装Centos操作 ...
- (转)USB的VID和PID,以及分类(Class,SubClass,Protocol)
USB的VID和PID,以及分类(Class,SubClass,Protocol) 原文地址:http://blog.csdn.net/gaojinshan/article/details/78783 ...
- 深入理解计算机系统 (CS:APP) - 高速缓存实验 Cache Lab 解析
原文地址:https://billc.io/2019/05/csapp-cachelab/ 这个实验是这学期的第四个实验.作为缓存这一章的配套实验,设计得非常精妙.难度上来讲,相比之前的修改现成文件, ...
- 妈妈再也不担心我面试被Redis问得脸都绿了
长文前排提醒,收藏向前排提醒,素质三连 (转发 + 在看 + 留言) 前排提醒! 前言 Redis 作为一个开源的,高级的键值存储和一个适用的解决方案,已经越来越在构建 「高性能」.「可扩展」 的 W ...
- vscode 配置c++记录
c_cpp_properties.json { "configurations": [ { "name": "MinGW", "i ...
- hdu1532 用BFS求拓扑排序
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目给出一些点对之间的先后顺序,要求给出一个字典序最小的拓扑排列.对于拓扑排序的问题,我们有DF ...