序列化方案对比

一、背景

前面两篇文章介绍了Google ProtoBuf序列化的使用及序列化原理,其实序列化的实现方案有无数种,本文会对以前用过或者有所了解的序列化方案进行一个对比,主要对比生成二进制流的大小,原始数据如下。

复制代码
"id":1,
"name":"qingcai18036",
"email":"qingcai18036@yeah.net"

二、JDK原生序列化

让要序列化的对象实现Serializable接口,就可以由ObjectOutputStream类完成序列化,它在进行序列化时要将对象类的元数据及业务对象全部序列化成字节流,并且把类的继承关系也一并序列化,所以序列化后的二进制流比较大。

优点:使用简单

缺点:序列化后二进制流比较大,无法跨语言。

注:印象中HSF框架开始版本只支持Java原生序列化和Hessian序列化两种,我们在构建服务创建实体类的时候都需要实现Serializable接口,不然客户端调用会报错,像单体应用不涉及到远程调用网络传输其实不一定要实现Serializable接口。

三、Hessian序列化

Hessian 是一个基于 binary-RPC 实现的远程调用,使用二进制传输数据。Hessian序列化时会把所有属性转成一个Map处理,生成类似下面这样数据

className propertyName1 I intValue propertyName S stringValue

其中 I代表Integer,S代表String。

优点:相对于JDK原生更高效,生成字节流更小。

缺点:对有些Java类型不支持。

注:HSF1.0好像就开始支持Hessian序列化,另外印象中很早时在Java和PHP交互时用到了Hessian。

四、JSON序列化

JSON序列化是文本型序列化框架,它的应用就太广泛了,前后端调用,基于HTTP的远程调用等。

优点:文本可读性好

缺点:JSON进行序列化的额外空间开销比较大,JSON在Java中需要通过反射转换成Java对象性能不会太好。

JSON序列化工具主要有 Alibaba Fastjson、Google Gson、Jackson等。

五、XML序列化

XML也是基于文本的序列化框架,在2005年JSON流行以前XML应用极其广泛。

XML序列化工具有xStream、jdom、dom4j等。

注:自己接触过的XML应用主要有 对接顺丰WMS系统的报文,微信公众号消息推送报文,另外更久远的是原来做社保项目时前端Dephi和后端Java交互用的的是SOAP(一种基于XML简单对象访问协议)

六、ProtoBuf序列化

优点:高效、兼容性好

具体使用和原理见 Google ProtoBuf介绍 高效的ProtoBuf

七、Thrift序列化

是Facebook开发的RPC框架,它也有自己的序列化方案,用起来好像比ProtoBuf要麻烦一些

这个我没用过,朋友写了一篇文章 ,感兴趣可以了解一下。

多亏了Thrift!NodeJS和Python可以愉快地交流

优点:高效

八、FAST协议

FAST协议是股票行情里用的,做到极致的压缩。

股票行情要传输的数据主要是 日期、时间、开盘价、最高价 、最低价 、当前价,这样可以约定 1->日期 2->时间 3->开盘价 4->最高价 5->最低价 6->当前价

样例数据如下

1=20190310 , 2=142900 , 3=13.4 , 4=15.0 ,5=13.0 ,6=13.5

九、序列化后二进制流大小对比

XML因为在JDK16上不支持xStream,所以没有数据。

相关推荐
承渊政道26 分钟前
飞算Java炫技赛:Java×Unity数字孪生园区平台的从零落地记录
java·开发语言·unity·技术分享·vibe coding·飞算javaai·飞算java ai炫技赛
wdfk_prog6 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
卓怡学长7 小时前
w255基于springboot仓库管理系统
java·数据库·spring boot·spring·intellij-idea
谭光志8 小时前
Vibe Coding 时代,程序员该何去何从
前端·后端·ai编程
Sirius Wu9 小时前
OpenClaw Skill:Matplotlib 可视化技能 + 沙箱双层隔离完整详解
服务器·网络·人工智能·安全·ai·架构·aigc
J-Tony119 小时前
【Redis】 Redis 是单线程还是多线程
服务器·数据库·mysql
这个DBA有点耶9 小时前
SQL调优进阶:从“优化一条SQL”到“优化一个系统”的思维升级
java·大数据·数据库·sql·程序人生·dba·改行学it
仿生狮子10 小时前
别再说“全栈”了,AI 时代团队只认这 5 种人
前端·人工智能·后端
kyriewen10 小时前
AI 写的 React 组件,合并前必查的 6 个坏味道——每个都有代码对比
前端·javascript·react.js
csdn2015_10 小时前
springboot读取配置的方法
java·spring boot·spring