Kryo是什么?

写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

Kryo是一个快速且高效的针对Java对象序列化的框架。

补充

优点

  1. 序列化的性能非常高
  2. 序列化结果体积较小
  3. 提供了简单易用的API
  4. Kryo序列化被很多开源项目使用,社区非常活跃,版本迭代也比较快。

缺点

  1. 不支持跨语言——Kryo是针对Java Object的序列化,对于跨语言方面是不支持的,但是很多场景中比如RPC,Cache,Store场景中一般很少需要对跨语言的支持。因此,Kryo的适用场景也很不错。
  2. 使用Kryo要注册需要序列化的自定义类型,如果不注册需要序列化的自定义类型,Kryo也能工作,不过,每个对象实例的序列化结果都会包含一份完整的类名,这有点浪费空间。

为什么使用kryo?

因为性能足够好。

比kryo更高效的序列化库就只有google的protobuf了(而且两者性能很接近)

protobuf有个缺点就是要传输的每一个类的结构都要生成对应的proto文件(也可以都放在同一个proto文件中,如果考虑到扩展性的话,不建议放在一个proto文件中),如果某个类发生修改,还得重新生成该类对应的proto文件;另外考虑到项目中用的全部是java技术栈,不存在不同编程语言间的兼容性问题,因此最终采用了kryo作为序列化库。

使用场景

数据交换或数据持久化

比如使用kryo把对象序列化成字节数组发送给消息队列或者放到redis等nosql中等等应用场景。

使用注意

由于kryo不是线程安全的,针对多线程情况下的使用,要对kryo进行一个简单的封装设计,从而可以多线程安全的使用序列化和反序列化。

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值