序列化组件对比

news2024/9/20 19:30:29

1、msgpack介绍

1.MsgPack产生的数据更小,从而在数据传输过程中网络压力更小

2.MsgPack兼容性差,必须按照顺序保存字段

3.MsgPack是二进制序列化格式,兼容跨语言

官网地址: https://msgpack.org/

官方介绍:It's like JSON. but fast and small.

压缩规范表:https://github.com/msgpack/msgpack/blob/master/spec.md?plain=1







简单分析msgpack例子

json格式:{"age":14, "subject":["math", "chinese", "english"]}

msgpack格式: 82 a3 61 67 65 0e a7 73 75 62 6a 65 63 74 93 a4 6d 61 74 68 a7 63 68 69 6e 65 73 65 a7 65 6e 67 6c 69 73 68

解读:

82 :两组map,即两组key-value pairs of objects

a3 61 67 65 :第一组map的key,类型为fixstr为 "age"

0e :第一组map的value,类型为positive fixint为14

a7 73 75 62 6a 65 63 74 :第二组map的key,类型为fixstr为“subject”

93 a4 6d 61 74 68 a7 63 68 69 6e 65 73 65 a7 65 6e 67 6c 69 73 68 :第二组map的value是个array,元素内容为str

a4 6d 61 74 68:第一个数组对象类型为fixstr为"math"

a7 63 68 69 6e 65 73 65 :第二个数组对象类型为fixstr为"chinese"

a7 65 6e 67 6c 69 73 68:第三个数组对象类型为fixstr为"english"

拼装起来就是{ "compact" : true , "schema" : 0 }

具体magpack的核心压缩方式可参看官方说明messagepack specification,这里就不细介绍了

2、Hessian序列化介绍

hessian是一种基于二进制的远程调用协议。占用空间小,跨语言,反序列化快

hessian会把复杂对象所有属性存储在一个 Map 中进行序列化,通过名称进行取值

3、hessian和msgpack对比





通过以上两种协议的实现原理,我们可以清楚的明白为什么msgpack从中间新加变量为什么会出错了

4、为什么从中间添加字段调用方会序列化报错?

【原因分析】:Msgpack是按字段顺序进行序列化和反序列化的,其缺点是无法改变字段顺序。

【解决方案】:

因Msgpack序列化不能改变字段顺序,所以在两边不同时升级的情况下,字段兼容规则如下:

1、不要调整原有字段顺序,不能删减字段,除非是删最后一个字段。

2、新加的字段必须在字段最后面(只是字段顺序,不是文件最后面,getter/setter方法等随意)。

3、父类的字段不能变。因为父类一变相当于子类的中间插入一个字段。

满足上面规则,服务端和客户端哪边先升级都无所谓。

如果是需要父类加字段,或者中间加减字段这种,则需要服务端和调用端同时升级





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2080622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android13系统源码内置App并通过AIDL调用获取内置存储卡的真实大小

jix 进行从事Android系统源码开发不得不在原有的系统上内置自己的App。通过内置App一般都需要调用些系统才能访问的系统级App。App的部署和调试需要依赖源码系统。通过命令 : mm 来实现。 第三方App想调用内置的app需要通过跨进程调用。 这里通过AIDL来实现跨进程…

RK3568平台(平台总线篇)SPI驱动框架分析

一.SPI 子系统框架 可以将上面这一 SPI 子系统划分为三个层次,分别为用户空间、内核空间和硬件层,内核空间就包括 SPI 设备驱动层、SPI 核心层和 SPI 适配器驱动层,而本章的主要内容就是介绍 SPI 子系统框架中的内核空间。 SPI 适配器驱动层: SPI 适配器驱动层是 SPI 子系…

【STM32】SPI

SPI又是另一个超级常见的外设通信方式。 大部分图片来源:正点原子HAL库课程 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 基本概念 1.1 与IIC的区别 1.2 引脚 1.3 移位原理 1.4 四种工作模式 2 NOR Flash 2.1 25Q12…

论文《Graph Structural Attack by Perturbing Spectral Distance》笔记

【SPAC 2022 KDD】大多数现有攻击方法在空间域中操作图,而对傅里叶域中图卷积的脆弱性研究较少。作者提出了一种名为SPectral AttaCk(SPAC)的攻击方法,通过最大化谱距离来实施攻击,并提出了一种有效的近似方法来降低特…

R语言股价跳跃点识别:隐马尔可夫hmm和 GARCH-Jump对sp500金融时间序列分析

全文链接:https://tecdat.cn/?p37479 分析师:Yue Ji 在突发事件发生后,股价会相应的发生较大幅度的上涨或下跌,称为跳跃现象,跳跃现象会给金融投资带来极大风险,因而对跳跃点的识别对于风控而言是很重要的…

web渗透:SQL注入漏洞WAF绕过

目录 如何检测和防范SQL注入攻击中的编码伪装? 检测SQL注入攻击中的编码伪装 防范SQL注入攻击中的编码伪装 WAF在处理SQL注入时为什么有时会对大小写不敏感? SQL注入中的联合查询注入有哪些常见的攻击方式? 在绕过Web应用防火墙&#xf…

实时计算Flink:推动行业变革的新时代引擎(附金融/汽车/物流/零售案例)

实时计算Flink:推动行业变革的新时代引擎(附金融/汽车/物流/零售案例) 前言实时计算Flink 前言 在当今数字化高速发展的时代,数据的价值愈发凸显,而实时计算技术则成为了挖掘数据价值的关键利器。阿里云实时计算 Flin…

道格拉斯-普克 Douglas-Peuker(DP算法) python php实现

废话不多说,直接开干! 最近在做一个车联网项目,有一个场景是车辆定时上报当前所在经纬度等位置信息上报给平台,平台通过web页面在高德地图上展示车辆行驶路径。 说明 道格拉斯-普克算法 (Douglas–Peucker algorithm,亦…

Leetcode面试经典150题-17.电话号码的字母组合

突然发现回溯题最近考的好多,其实没啥技术含量 解法都在代码里,不懂就留言或者私信 class Solution {public static final char[][] digitsCharArr {{},{},{a,b,c},/**数字2可以代表的字符 */{d,e,f},{g,h,i},{j,k,l},{m,n,o},{p,q,r,s},{t,u,v},{w,x…

【数据结构入门】二叉树之堆排序及链式二叉树

目录 前言 一、堆排序 1.概念 2.堆排序思想 3.具体步骤 4.实现 5.复杂度 二、堆的应用——TopK问题 三、链式二叉树 1.二叉树创建 2.二叉树遍历 1)前序、中序以及后序遍历 2)层序遍历 3.结点个数以及高度 1)结点个数&#xff1a…

阿里巴巴中间件canal的搭建和使用以及linux命令下使用mail发送html格式的邮件

一、阿里巴巴中间件canal的搭建和使用 canal可以用来监控数据库数据的变化(binlog日志),从而获得指定数据的变化。canal是应阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求时开始逐步的尝试基于数据库的日志解析,获取增量变更…

Netty三

Netty TCP拆包粘包 二次编码方式 常用二次解码器 网络应用程序基本步骤 数据结构设计 完善客户端 客户端实例 Netty编程易错点

C++ 设计模式——适配者模式

C 设计模式——适配者模式 C 设计模式——适配者模式1. 主要组成成分2. 逐步构建适配者模式2.1 目标抽象类定义2.2 源类实现2.3 适配器类实现2.4 客户端 3. 适配者模式 UML 图适配者模式 UML 图解析 5. 类适配者6. 适配者模式的优点7. 适配者模式的缺点8. 适配者模式适用场景总…

永久去除windows11推荐产品的软件

永久去除windows11推荐产品的软件 去除windows11 推荐的项目,并用来固定软件 要求 22621及以上版本 企业版,专业教育版,教育版(可以自行找工具切换,无需重装系统,非常方便的。) [软件原创作者]&#xff…

【Python】Python 函数综合指南——从基础到高阶

文章目录 Python 函数综合指南1. 函数介绍1.1 什么是函数?1.2 定义函数示例:1.3 调用函数1.4 函数参数1.4.1 必需参数1.4.2 默认参数1.4.3 关键字参数1.4.4 可变长度参数 2. Python 内置函数2.1 字符串处理函数示例: 2.2 数学函数示例&#x…

音视频相关

ffmpeg 安装 1. 源码安装 git clone https://git.ffmpeg.org/ffmpeg.git 2. 配置 编译 安装 ./configure --prefix/usr/local/ffmpeg --enable-debug3 --enable-shared --disable-static --disable-x86asm --enable-ffplaymake -jnproc && make install Q: 没有ff…

C++ 基础学习

提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream>using namespace std;int main() {cout<<"请输入字符串:";string str;getline(cin,str);int num0;int alp0;int spa0;int other0;int …

大语言模型-GPT3-Language Models are Few-Shot Learners

一、背景信息&#xff1a; GPT3是于2020 年由OpenAI 发布的预训练语言模型。 GPT3在自然语言处理&#xff08;NLP&#xff09;任务中表现出色&#xff0c;可以生成连贯的文本、回答问题、进行对话等。 GPT3的网络架构继续沿用GPT1、GPT2的是多层Transformer Decoder改的结构。…

论文笔记:GEO-BLEU: Similarity Measure for Geospatial Sequences

22 sigspatial 1 intro 提出了一种空间轨迹相似性度量的方法比较了两种传统相似度度量的不足 DTW 基本特征是它完全对齐序列以进行测量&#xff0c;而不考虑它们之间共享的局部特征这适用于完全对齐的序列&#xff0c;但不适用于逐步对齐没有太多意义的序列BLEU 适用于不完全…

MVSEP-MDX23容器构建详细教程

一、介绍 模型GitHub网址&#xff1a;MVSEP-MDX23-music-separation-model/README.md 在 main ZFTurbo/MVSEP-MDX23-音乐分离模型 GitHub 上 在音视频领域&#xff0c;把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件…