Kryo序列化简述

前言


在之前的文章中,有针对JDK序列化方式的描述以及代码示例
由于其序列化后的数据较大,且序列化的性能不高,于是市面上出现了很多既可以缩小序列化后数据大小并且又能提高序列化性能的序列化框架,例如Google出品的Protobuf以及Kryo等
 

序列化框架性能


以下两张图是引用网上关于几款序列化框架的性能及大小测试的对比图

时间占用对比图:

时间占比
空间占用对比图:

空间占比
由此可见,JDK原生的序列化方式耗时最长,并且占用空间最大。在对比之下,各方面表现较好的是Google的Protobuf,Protobuf需要通过静态编译.proto文件来获得Java文件,使用起来不是特别方便,但是后来新出现的Protostuff弥补了这个不足,支持在Java程序中使用Schema动态配置POJO的映射关系。关于Protobuf的学习我会放在后面,这里是对Java语言实现的Kryo进行学习,毕竟它的表现与Protobuf旗鼓相当。
 

Kryo序列化


Kryo是一个快速高效的Java序列化框架,旨在提供快速、高效和易用的Api

我打算自己实现一个RPC框架,目前想的是就是用Kryo是用序列化框架,因为觉得首先,这个序列化框架是使用Java语言写的,性能也和不错,并且使用起来相对方便

1.首先需要再项目中引入对应的pom依赖:

        <dependency>
            <groupId>com.esotericsoftware</groupId>
            <artifactId>kryo</artifactId>
            <version>4.0.1</version>
        </dependency>

2.定义需要序列化的类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class KryoTest {

    private Long id;

    private String name;

    private List<String> list;

}

3.进行序列化处理

Kryo kryo = new Kryo();
kryo.register(KryoTest.class);

List<String> list = new ArrayList<>(2);
list.add("aa");
list.add("bb");
Output output = new Output(new FileOutputStream("output.txt"));
KryoTest kryoTest = new KryoTest(1L, "Test", list);
kryo.writeObject(output, kryoTest);
output.close();

4.进行反序列化处理

Kryo kryo = new Kryo();
kryo.register(KryoTest.class);

Input input = new Input(new FileInputStream("output.txt"));
KryoTest kryoTest1 = kryo.readObject(input, KryoTest.class);
input.close();
System.out.println(kryoTest1.toString());

5.输出结果

KryoTest(id=1, name=Test, list=[aa, bb])

 

总结


通过上面简单例子熟悉了Kryo序列化的简单使用,当时要是想要用在生产过程中还有有一些需要注意的问题的

比如像上面性能对比两张图展示的那样,Kryo要是想发挥出色的性能还是需要做一些配置的,可以通过类注册+关闭循环引用的方式,提高序列化的性能

此外,Kryo序列化不是线程安全的,在使用过程中还需要注意线程安全问题,此部分内容,我在后续实现RPC框架的过程中会进行学习和总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值