Java 序列化总结.md
概述
- 序列化:将对象写入到
IO
流中 - 反序列化:从
IO
流中恢复对象
实现方法
实现 Serializable
或者 Externalizable
Serializable
:标记接口,不用实现任何方法,可以指定序列化ID
Externalizable
:增强的序列化标记接口,提供了writeExternal
和readExternal
两个接口方法,这两个方法在序列化和反序列化的过程中会被调用
注意,序列化 ID
只是一个版本号,两种方法都可以不指定,JVM
会根据类中的信息自动计算一个序列化版本号。不指定序列化版本号可能存在如下隐患:
- 不同版本的
JVM
可能会有不同的计算规则,可能会导致类的信息完全一致但是序列化失败 - 在类中的信息被修改后,由于
JVM
计算出来了不同的版本号,则很可能导致序列化失败
Serializable 和 Externalizable 的区别
- 实现
Serializable
不用额外实现方法,但是实现Externalizable
必须实现writeExternal
和readExternal
两个方法 - 实现
Externalizable
必须要提供public
修饰的无参构造器,否则会报错;Serializable
不需要无参构造器 - 实现
Externalizable
必须把所有需要序列化的属性在writeExternal
中一一手动序列化,所有需要反序列化的属性在readExternal
中一一手动反序列化;Serializable
由JVM
自动完成
Serializable 的扩展点
- 可以实现
private void writeObject(ObjectOutputStream out)
来自定义序列化逻辑,注意必须使用完全一致的方法名和private
修饰符 - 可以实现
private void readObject(ObjectInputStream in)
来自定义反序列化逻辑,注意必须使用完全一致的方法名和private
修饰符 - 当某个属性上加上了
transient
关键字后,这个属性将不会被序列化
注意点
- 当一个序列化对象存在一个引用类型的对象时,这个对象也必须是可实例化的(或者加上
transient
关键字),否则会报错 - 同一对象只会被序列化成二进制流一次,不会重复序列化
- 单例类被序列化时,需要重写
readResolve
方法,否则会破环单例机制
Java 序列化总结.md相关推荐
- Java序列化的机制和原理
有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述 ...
- java基础(十)-----Java 序列化的高级认识
将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ...
- java序列化和RMI
深入了解序列化"契约" 由于Java提供了良好的默认支持,实现基本的对象序列化是件比较简单的事.待序列化的Java类只需要实现Serializable接口即可.Serializab ...
- 什么是java序列化_什么是Java序列化?为什么序列化?序列化有哪些方式?
先普及一下,计算机中无法识别一个基本单元[字节]来表示,必须经过"翻译"才能让计算机理解人类的语言,这个翻译过程就是[编码],通常所说的字符转换为字节. ?有I/O的地方机就会涉及 ...
- java kryo_kryo序列化 - Java序列化期间的错误
我的应用程序有大量域对象,它们通过spring-session被序列化到Redis存储中.我试图使用Kryo(4.0.0)进行自动序列化,而不使对象明确可序列化.kryo序列化 - Java序列化期间 ...
- java 序列化慢_java原生序列化慢在哪里?
Java原生序列化和二进制序列化性能比较 序列化速度 package com.clq.netty.serializable; import java.io.ByteArrayOutputStream; ...
- Java序列化的作用和反序列化
1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object states,但 ...
- Java序列化技术与Protobuff
前言: Java序列化是Java技术体系当中的一个重要议题,序列化的意义在于信息的交换和存储,通常会和io.持久化.rmi技术有关(eg:一些orm框架会要求持久化的对象类型实现Serializabl ...
- 深入理解JAVA序列化
2019独角兽企业重金招聘Python工程师标准>>> 如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件.那你最好再阅读该篇文章,文章对序列化进行了更深一 ...
最新文章
- CMake 打包已经存在的动态库生成 target
- linux shell中小数的运算
- SAP QM 检验批上各个MIC质检结果的查询报表?
- gzcms技术开发文档
- 【.Net 学习系列】-- EF Core实践(Code First)
- s5pv210 音频播放问题 MPlayer移植
- Codeforces Round #168 (Div. 2)---A. Lights Out
- 44. xargs命令
- sqlite3x library
- 自已脚本开发常用的底层方法
- k8s实战之从私有仓库拉取镜像 - kubernetes
- Asp.net中web.config配置文件详解
- 简单java数组程序_java(数组及常用简单算法 )
- android去除标题栏和状态栏(全屏)
- mysql事务_MySQL事务提交过程(一)
- rs232读取智能电表_深度了解智能电度表,面板内容大揭秘!
- 项目管理十大知识领域和五大过程
- python实现阿里云盘同步功能(sync_folder)
- 详细分析《三合一收款码》后台程序识别原理
- 让临时停车号码牌会说话--鲁哇客智能挪车号码牌技术升级之路
热门文章
- oracle 增量_【干货分享】DMETL中的增量抽取初识
- PHP页面中嵌套go语言,go语言嵌套类型的使用细节
- SpringCloud Ribbon中的7种负载均衡策略!
- SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!
- ThreadLocal内存溢出代码演示和原因分析!
- Zabbix配置模板监控指定服务器主机
- 服务发现与负载均衡traefik ingress
- 1002 写出这个数 (20分)-Java
- 彩票模拟选号程序java_java课程设计-彩票购买抽奖程序
- linux查看r的安装路径,在Linux CentOS 6.5版上安装R3.1.1的问题(检查LDFLAGS以获取Fortran库的路径)...