jdk源码--序列化
2017-10-09 16:28
162 查看
Serialization 序列化是将java对象转换成字节序列的过程,反序列化就是将这些字节重建成对象的过程
起因:分布式对象经常需要将对象从网络的一端传递到另一端。
如何序列化一个对象
这个就要用到ObjectOutputStream,ObjectInputStream
后面看下这个源码。
java序列化算法:
先输出对象类的元数据
递归输出类的超类元数据
从最顶层的超类开始数据实际的数据值
递归输出实例数据值
序列化不保存静态变量的值,也好理解,序列化传递的是对象的状态
反序列化前会检查seruid是否相同,如果没有会默认生成
反序列化时,如果seruid自定义相等,且字段名称类型不变,那么即使类有部分改变,也能够序列化成功,序列化的对象字段无论比本地类字段多或者少都能够序列化成功,但是不能改变现有字段
序列化的关键是:ObjectOutputStream的writeObject方法,以及ObjectInputStream的readObject方法。
无论是默认序列化方式,还是自定义序列化,还是外部序列化,序列化时都要调用到以上类的两个方法。
java.io.ObjectOutputStream:
起因:分布式对象经常需要将对象从网络的一端传递到另一端。
如何序列化一个对象
这个就要用到ObjectOutputStream,ObjectInputStream
后面看下这个源码。
java序列化算法:
先输出对象类的元数据
递归输出类的超类元数据
从最顶层的超类开始数据实际的数据值
递归输出实例数据值
序列化不保存静态变量的值,也好理解,序列化传递的是对象的状态
反序列化前会检查seruid是否相同,如果没有会默认生成
反序列化时,如果seruid自定义相等,且字段名称类型不变,那么即使类有部分改变,也能够序列化成功,序列化的对象字段无论比本地类字段多或者少都能够序列化成功,但是不能改变现有字段
序列化的关键是:ObjectOutputStream的writeObject方法,以及ObjectInputStream的readObject方法。
无论是默认序列化方式,还是自定义序列化,还是外部序列化,序列化时都要调用到以上类的两个方法。
java.io.ObjectOutputStream:
相关文章推荐
- 【JDK源码分析】02-对象反序列化ObjectInputStream
- JDK源码之序列化与反序列化
- 【JDK源码分析】01-对象序列化ObjectOutputStream
- 【JDK源码分析】04-使用Externalizable实现自定义序列化
- linux下部署的jdk为什么编译不了安卓源码
- 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析
- 集合详解(四)----HashSet和HashMap源码剖析(JDK1.7)
- jdk源码分析之CopyOnWriteArrayList
- 调试JDK源码-Hashtable实现原理以及线程安全的原因
- ConcurrentHashMap源码分析(基于JDK1.8)
- eclipse 查看JDK中源码
- 【JDK源码】从JDK/ArrayList源码学习高质量代码
- 容器第三课,JDK源码分析,自己实现ArrayList数组扩容
- JDK源码分析之Set类详解——适配器模式的应用
- Ilungasoft Framework: 由Emit带来的序列化问题——IEntity的序列化支持范例[源码][04/08修正]
- ArrayList 源码解析 及其扩展(jdk1.7)
- 【Java】HashMap源码分析(JDK1.8)
- jdk源码分析之ArrayList
- jdk 1.8 hashmap源码解读(详细)(上)
- JDK源码调试