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: