序列化组件对比

news/2024/9/18 15:06:33/ 标签: 开发语言, java

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.ppmy.cn/news/1517005.html

相关文章

【Python机器学习】NLP概述——深度处理

自然语言处理流水线的各个阶段可以看作是层,就像是前馈神经网络中的层一样。深度学习就是通过在传统的两层机器学习模型架构(特征提取建模)中添加额外的处理层来创建更复杂的模型和行为。 上图中,前四层对应于聊天机器人流水线中的…

<数据集>遥感船舶识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:15047张 标注数量(xml文件个数):15047 标注数量(txt文件个数):15047 标注类别数:25 标注类别名称:[Aircraft Carrier, Auxiliary Ships, Other Ship, Other Warship,…

【51单片机实物】基于51单片机设计的简易直流电机调测速系统(可用在普中开发板)——程序源码设计文档演示视频等(文末工程资料下载)

基于51单片机设计的简易直流电机调测速系统 演示视频 基于51单片机设计的简易直流电机调测速系统(可用在普中开发板) 功能任务描述:将设置的转速与当前测量的转速比较,得出差值用于控制DAC0832的输出电压,从而控制直流电机的转速,使转速逐渐达到设置转速。在LED上显示设…

【代码随想录训练营第42期 Day39打卡 - 打家劫舍问题 - LeetCode 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

目录 一、做题心得 二、题目与题解 题目一:198.打家劫舍 题目链接 题解:动态规划 题目二:213.打家劫舍II 题目链接 题解:动态规划 题目三:337.打家劫舍III 题目链接 题解:动态规划 三、小结 一、…

通过React实现萤石摄像头rtsp地址格式的视频流的web展示

首先,我们需要拿到rtsp格式的流地址(rtsp://admin:[password][ip]),其中 password:设备底下的6位数验证码 ip:设备的ipv4地址 这里拿到ip的方式可以直连网线和绑定wifi两种方式 然后下载PC端的萤石工作室(下载中心…

五、Centos7-安装Jenkins

目录 一、基础环境准备 1.安装JDK 2.安装Tomcat 二、安装Jenkins 1.配置Jenkins插件镜像源 2.问题:进入manager jenkins页面报错 3.配置Git 4.配置jdk 三、重新安装Jenkins 四、另一种Centos安装jenkins的方式--最终可用版 克隆了一个base的虚拟机&#x…

UnrealEngine学习(01):安装虚幻引擎

1. 下载安装 Epic Games 目前下载UE引擎需要先下载Epic Games,官网为我们提供了下载路径: https://www.unrealengine.com/zh-CN/downloadhttps://www.unrealengine.com/zh-CN/download 我们点击图中步骤一即可进行下载。 注释:Unreal Engi…

未初始化的变量

学习C语言局部变量,经常听到这个说法。为什么局部变量默认是未初始化的?解释它需要理解程序结构和栈操作。 栈内存 C/C函数的局部变量保存在栈,栈可以认为是操作系统为了“加速”程序运行给线程配置了一块临时使用的内存区域,如果…

Spring Boot 框架中配置文件 application.properties 当中的所有配置大全

Spring Boot 框架中配置文件 application.properties 当中的所有配置大全 #SPRING CONFIG(ConfigFileApplicationListener) spring.config.name #配置文件名(默认 为 application ) spring.config.lo…

一个干净的python项目(没连数据库啥的)

希望你们写代码有用(直接可以拿来用,我只要您的一个关注和赞赞) #用户数据 user1{"用户名":"aaa","密码":"123","姓名":"热孜娅","类型":"客户"} user2{&q…

Python 爬虫框架

Python 中有许多强大且主流的爬虫框架,这些框架提供了更高级的功能,使得开发和维护爬虫变得更加容易。以下是一些常用的爬虫框架: 1. Scrapy - 简介: Scrapy 是 Python 最流行的爬虫框架之一,设计用于快速、高效地从网站中提取…

【Rust光年纪】文本分析利器:探索Rust语言的多功能文本处理库

从情感分析到关键词提取:Rust语言文本分析库详解 前言 随着自然语言处理技术的不断发展,对各种文本数据进行分析和处理的需求也在不断增加。本文将介绍一些用于Rust语言的文本分析和处理库,包括情感分析、自然语言处理、中文转换、语言检查…

SQL,给连续的行加上标识序号

postgresql 数据库的表 tmp 有 2 个分组字段,source_id 和 event_user,将该表按 source_id 分组,组内按 event_date 排序后,event_user 相同的值会形成有序的小组: idsource_idevent_userevent_date11A05-03-201421A0…

DSB调制与解调仿真实验

一、实验目的: 熟悉使用SystemView软件,了解各部分功能模块的操作和使用方法。 通过实验进一步观察、了解模拟信号DSB调制、解调原理。 掌握DSB调制信号的主要性能指标。 比较、理解DSB调制的相干解调原理。 二、实验器材: 装有SystemV…

spring security怎么生成JWT返回前端,以及怎么自定义JWT认证过滤器

怎么生成JWT返回前端 1.先写一个类,里面含有jwt的生成解析验证过期时间的方法 package com.lzy.util;import io.jsonwebtoken.*; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.…

黑神话悟空用什么编程语言

《黑神话:悟空》作为一款备受瞩目的国产单机动作游戏,其背后的开发涉及了多种编程语言和技术。根据公开信息和游戏开发行业的普遍做法,可以推测该游戏主要使用了以下几种编程语言: C: 核心编程语言:作为《黑…

从行为面试问题(behavioral questions)看中美程序员差异。

中美程序员在职场中的工作状态和职能、福利等有很大区别,从面试中的BQ轮就可见一斑。 中美程序员的面试轮差异? 国内的面试轮在不同公司间差异很大,但总体的问题类型包含笔试面试(算法题、概念题、项目深挖、职业目标、职场文化…

【刷题笔记】leetCode448找到缺失的数

常规解法 public List<Integer> findDisappearedNumbers(int[] nums) {HashMap<Integer,Integer> numMap new HashMap<>();for (int i 0;i<nums.length;i){if (numMap.get(nums[i]) null){numMap.put(nums[i],i);}}List<Integer> result new A…

物联网关创业之路:从梦想到现实

在物联网大潮涌动的时代&#xff0c;李明看到了无限的机遇。他一直对科技充满热情&#xff0c;坚信物联网将改变人们的生活和工作方式。各类设备 IoT 的兴起&#xff0c;让他意识到一个强大的物联网关对于实现设备互联和数据传输的重要性。 李明决定投身于物联网关的设计开发创…

Apache Druid日志实时分析

业务分析 ​ 秒杀业务中&#xff0c;通常会有很多用户同时蜂拥而上去抢购热卖商品&#xff0c;经常会出现抢购人数远大于商品库存。其实在秒杀过程中&#xff0c;热卖商品并不多&#xff0c;几乎只占1%&#xff0c;而99%的流量都源自热卖商品&#xff0c;很有可能因为这1%的热…