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);


java序列化(理解)
 然后是第4步,第5步是写类描述,第六步写对象数据

 

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

 

java反序列化

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

 

2、读TC_OBJECT

 

3、

你可能感兴趣的:(java序列化)