序列化和反序列化,你要明白的那些事儿

目录

一、序列化和反序列化

1、Java开发中序列化和反序列化的工具

2、分布式场景下的数据通信或者异构环境下的数据交换

3、编码器和解码器


一、序列化和反序列化

我们在开发一些远程过程调用(RPC)的程序时,通常会涉及对象的序列化和反序列化问题。

序列化:

java对象---> json格式的结构化字符串--->字节流

java对象--->xml格式的字符串--->字节流

java对象--->protobuf格式的二进制数据--->字节流

反序列化:

字节流--->json格式的结构化字符串--->java对象

字节流--->xml格式的字符串--->java对象

字节流--->protobuf格式的二进制数据--->java对象

1、Java开发中序列化和反序列化的工具

java处理JSON数据有三个比较流行的开源类库:阿里的FastJson、谷歌的Gson和开源社区的Jackson。

1、使用jackson开源库,可以轻松将java的POJO对象转换成JSON、XML格式的字符串;同样也可以方便的将JSON、XML字符串转换成java的POJO对象。

2、谷歌的开源库Gson是一个功能齐全的JSON解析库,起源于Google公司内部需要而研发。2008年5月第一版发布以来已经被许多公司所采用。Gson可以完成复杂类型的POJO和JSON字符串的互相转换,转换的能力非常强。

3、阿里巴巴的FastJson是一个高性能的JSON库。从性能上说,FastJson库采用独创的算法,将JSON转换成POJO的速度提升到极致,超过其他的JSON开源库。

选取的策略:

在实际开发中,目前主流的策略是:Google的Gson库和阿里的FastJson库两者结合使用。在POJO序列化成JSON字符串的应用场景,使用Google的Gson库;

在JSON字符串反序列化成POJO的应用场景,使用阿里的FastJson库。

总而言之:序列化看谷歌,反序列化看阿里。

 

2、分布式场景下的数据通信或者异构环境下的数据交换

与JSON、XML相比,Protobuf算是后起之秀,是Goolge开源的一种数据格式。只是Protobuf更加适合于高性能、快速响应的传输应用场景。

显然:Protobuf也没什么神奇的,他只是一种数据的组织格式,既然有组织格式就必须有协议,而协议其实就是通信双方约定的规则而已,你不按照规则发送,我就不接受。

JSON、XML是文本格式,数据具有可读性,但是体积较大;

Protobuf是二进制数据格式,可读性差,但是体积小;

在需要大量传输数据的场景中,因为数据量大,那么选择Protobuf可以明显的减少传输的数据量、提升网络IO的速度。

Protobuf的另外一个特点是:既独立于语言,又独立于平台。

 

3、编码器和解码器

1、ProtobufEncoder编码器和ProtobufDecoder解码器;

缺点:存在粘包和半包的问题。

2、ProtobufVarint32LengthFieldPrepender长度编码器和ProtobufVarint32FrameDecoder长度解码器;

可以解决粘包和半包的问题。

3、自定义的Protobuf编码器和解码器

复杂场景:在Head部分加上魔数据字段进行安全验证或者需要对Protobuf Data的内容进行加密和揭秘等。


        
    
        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值