【序列化】Kryo 的几种常见序列化实现方式,及其兼容性

Kryo 是啥

Kryo是Java生态中的一种序列化框架。许多软件组织在使用Dubbo(Dubbox)这套RPC框架时,经常会搭配使用 Kryo 作为其序列化方案。Kryo本身自带了很多针对 Java 原始数据类型 和 JDK常见类型的 序列化实现(如,DefaultSerializers)。它的姐妹工程 Kryo-Serializers 还提供很多额外的序列化实现。

序列化/反序列化的兼容性问题

序列化/反序列化 最主要的是关注对象内容。大多数场景中,我们只会序列化对象的内容,即各字段的值。而对象的类信息,它们属于元信息,是不会被序列化的。如果将这些元信息也加入到序列化内容中,会导致得到的结果数据非常大。尤其在RPC之类的网络传输中,这些数据会消耗大量资源。

那么,如果不传递这些元信息,数据的接收端怎么知道这些数据的类型呢?这就需要事先在接收端也准备好一份对应的类型信息(通常是一个JAR包)。(某些场景中将这类事先分发的元信息称为“字典”。有点类似战争中分发的密码本。)

这又引出了另一个问题:发送端 和 接收端 的类型信息(JAR包)版本可能不一致;这种不一致很可能导致接收端反序列化失败。尤其是在大型的复杂软件体系中,发送端 和 接收端 的升级节奏可能不一样的,很多时候需要容忍有较长时间的不同版本同时运行。(战争中密码本会定期更新;遇到密码本泄漏或密码被敌军破译的情况时,还需紧急更新。)

此文中讨论的 “兼容性” 仅表示数据本身的序列化和反序列化。业务层面的兼容性当然得由业务系统的设计者自行考量。

为了达成序列化/反序列化的的“兼容性”,最关键的是要“跳过”那些无法被识别的字段。如何才能实现这个“跳过”呢?显然,需要鉴别

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值