java序列化(理解)

仅此记录,如果雷同,纯属巧合

 

java序列化顺序:

 

(1)类元数据(类的相关描述)

         1、STREAM_MAGIC. 声明使用了序列化协议.

         2、STREAM_VERSION. 序列化协议版本

         3、TC_OBJECT. 声明这是一个新的对象.

         4、Class名字的长度.

         5、Class类名

         6、序列化ID

         7、标记号. 该值声明该对象支持序列化

         8、该类所包含的域个数

 

(2)递归地输出父类描述

 

(3)从顶层开始输出对象实例的实际数值

 

下面我们来剖析看看这些东西是什么时候写入的,首先

是1和2

 protected void writeStreamHeader() throws IOException {
        bout.writeShort(STREAM_MAGIC);
        bout.writeShort(STREAM_VERSION);
    }

在new一个ObjectInputStream的时候,在其构造函数里面就调用了writeStreamHeader()

 

第3步在writeObject方法里面的

if (obj instanceof Serializable) {
    writeOrdinaryObject(obj, desc, unshared);
}

里面写入bout.writeByte(TC_OBJECT);



 然后是第4步,第5步是写类描述,第六步写对象数据

 

如此,就可以完全知道其序列化的顺序(即序列化的算法)

 

java反序列化

1、读STREAM_MAGIC和STREAM_VERSION----》readStreamHeader();

 

2、读TC_OBJECT

 

3、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值