Skip to content

解释下 Serialization 和 Deserialization

cxuan edited this page Sep 20, 2020 · 1 revision

Serialization Deserialization 对应序列化和反序列化,是Java在数据传输时将对象转换为字节流进行传输,到达目的地之后再反序列化转换回对象。 一般用来对象的持久化和网络传输场景。比如说将对象保存到Redis或者保存到文件,或者通过rpc调用时将参数传输到远端。 Java中 需要实现serialization接口,因为在objectinputstrem的write方法中会进行判断该对象是否实现serialization接口。 不实现该接口无法使用jdk的序列化工具,但是可以使用第三方的序列化工具。 同时需要定义serializationID ,反序列化的时候会比较该ID,如果ID对不上,就会抛序列化异常。 同时,如果不指定序列化ID,会根据字段值自动生成一个ID, 如果是根据字段生成的ID,后面当字段发生变更的时候,反序列化会失败,因此建议还是自己指定ID ,枚举无法被序列化,其序列化的时候保存的只是枚举的一个name字符串,并非是枚举对象本身的二进制字节流, 同理 对枚举进行反序列化的时候,是根据枚举的name在内存找对应的枚举,找到了就返回该枚举,因此枚举的序列化和反序列化都不会创建新的对象,可以保证单例。

Clone this wiki locally