今日总结10.29
常见序列化协议有哪些
序列化(serialization)是将对象序列化为二进制形式(字节数组),一般也将序列化称为编码(Encode),主要用于网络传输、数据持久化等。常见的序列化协议包括以下几种:
-
JSON(JavaScript Object Notation):
- 一种轻量级的数据交换格式,易于阅读和编写。
- 它基于JavaScript语言的一个子集,但是可以被多种编程语言使用。
- 支持复杂的数据结构,包括数组、对象、字符串、数字等。
- 前后兼容性高,数据格式简单,易于读写,序列化后数据较小,可扩展性好,兼容性好。
- 相对于XML,其协议比较简单,解析速度较快。但数据的描述性比XML差,不适合性能要求为毫秒级别的情况,且额外空间开销比较大。
- 适用于跨防火墙访问、可调式性要求高的情况、基于Web browser的Ajax请求,以及传输数据量相对小、实时性要求相对低(例如秒级别)的服务等场景。
-
XML(eXtensible Markup Language):
- 一种标记语言,用于描述数据的结构和内容。
- 具有良好的可扩展性和跨平台性,可以通过DTD(Document Type Definition)或者XSD(XML Schema Definition)定义数据的结构。
- 序列化数据只包含数据本身以及类的结构,不包括类型标识和程序集信息。类必须有一个将由XmlSerializer序列化的默认构造函数,且只能序列化公共属性和字段,不能序列化方法。
- 文件庞大,文件格式复杂,传输占带宽。
- 常用于做配置文件存储数据、实时数据转换等场景。
-
Protocol Buffers(protobuf):
- 由Google开发的一种二进制序列化协议。
- 使用简洁的接口描述语言来定义数据结构,并生成相应的代码进行序列化和反序列化操作。
- 具有高效的编码和解码速度,以及较小的数据体积。
- 序列化后码流小,性能高,是结构化数据存储格式。通过标识字段的顺序,可以实现协议的前向兼容,结构化的文档更容易管理和维护。
- 需要依赖于工具生成代码,且支持的语言相对较少,官方只支持Java、C++、Python。
- 适用于对性能要求高的RPC调用、具有良好的跨防火墙的访问属性的场景,也适合应用层对象的持久化。
-
Thrift:
- 由Facebook开发的一种跨语言的服务框架,也包含了一种二进制序列化协议。
- 使用IDL(Interface Description Language)来定义数据结构和服务接口,并生成相应的代码进行序列化和反序列化操作。
- 支持多种编程语言,并提供了高效的网络通信能力。
- 序列化后的体积小、速度快,支持多种语言和丰富的数据类型,对于数据字段的增删具有较强的兼容性,还支持二进制压缩编码。
- 但使用者较少,跨防火墙访问时不安全,不具有可读性,调试代码时相对困难。不能与其他传输层协议共同使用(例如HTTP),也无法支持向持久层直接读写数据,即不适合做数据持久化序列化协议。
- 常用于分布式系统的RPC解决方案等场景。
-
MessagePack:
- 一种高效的二进制序列化协议,类似于JSON。
- 将数据压缩为二进制格式,具有较小的数据体积和高速的编码解码能力。
- 支持多种编程语言,并且可以与JSON相互转换。
-
Avro:
- 一种基于Schema的二进制序列化协议,由Apache开发。
- 使用JSON来定义数据结构,并将数据编码为紧凑的二进制格式。
- 支持动态类型、架构演化和跨语言等特性。
- Binary格式在空间开销和解析性能方面可以和Protobuf媲美,Avro的产生解决了JSON的冗长和没有IDL的问题。
- 支持丰富的数据类型,简单的动态语言结合功能,具有自我描述属性,提高了数据解析速度。其快速可压缩的二进制数据形式可以实现远程过程调用RPC,并支持跨编程语言实现。
- 对于习惯于静态类型语言的用户可能不太直观。
- 适用于Hadoop中做Hive、Pig和MapReduce的持久化数据格式等场景。Avro的设计理念偏向于动态类型语言,因此对于动态语言为主的应用场景,Avro是更好的选择。
-
Fastjson:
- 一个Java语言编写的高性能功能完善的JSON库。
- 采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致。
- 接口简单易用,是目前Java语言中最快的json库。
- 但过于注重快,而偏离了“标准”及功能性,代码质量不高,文档不全。
- 适用于协议交互、Web输出、Android客户端等场景。
为什么不推荐使用 JDK 自带的序列化
不推荐使用JDK自带的序列化(即java.io.Serializable)的原因主要有以下几点:
- 不支持跨语言调用:
- JDK自带的序列化方式高度依赖Java语言,序列化后的字节数组只能由Java语言反序列化,无法与其他编程语言(如C++、Python、Go等)进行无缝传输与反序列化。这在多语言、多平台交互的系统中会造成不便。
- 性能较差:
- JDK自带的序列化机制在序列化和反序列化过程中会产生较大的字节数组,增加了存储和传输的负担。
- 相较于其他高效的序列化框架(如Protobuf、Thrift等),JDK自带的序列化方式在性能上显得较低,序列化速度相对较慢。
- 存在安全隐患:
- JDK自带的序列化和反序列化机制容易受到反序列化攻击。攻击者可以通过构造恶意输入数据,利用反序列化过程中的漏洞执行任意代码,造成系统安全漏洞。
- 为了避免这些安全问题,需要开发者在序列化和反序列化过程中进行严格的校验和防护,这增加了开发的复杂性和风险。
- 可读性差:
- JDK自带的序列化方式生成的字节流是二进制数据,不易阅读和理解。这对于调试和排查问题来说是一个不利因素。
- 版本兼容性问题:
- 当类的定义发生变化时,如果没有妥善处理序列化ID(serialVersionUID)的一致性,可能会导致反序列化失败。这增加了维护和管理序列化数据的复杂性。
相关文章:
今日总结10.29
常见序列化协议有哪些 序列化(serialization)是将对象序列化为二进制形式(字节数组),一般也将序列化称为编码(Encode),主要用于网络传输、数据持久化等。常见的序列化协议包括以下几…...

使用 FastGPT 工作流实现 AI 赛博算卦,一键生成卦象图
最近那个男人写的汉语新解火遍了全网,那个男人叫李继刚,国内玩 AI 的同学如果不知道这个名字,可以去面壁思过了。 这个汉语新解的神奇之处就在于它只是一段几百字的提示词,效果却顶得上几千行代码写出来的应用程序。 这段提示词…...

vue3+ts实时播放视频,视频分屏
使用vue3以及播放视频组件Jessibuca Jessibuca地址 使用循环个数来实现分屏 效果图,四屏 九屏 dom代码 <div class"icon"><div class"icon-box"><span class"text">分屏:</span><el-icon …...

【网页设计】学成在线案例
Demo 典型的企业级网站,目的是为了整体感知企业级网站的布局流程,复习以前知识。 集合代码见文章最后。 5.1 准备素材和工具 学成在线 PSD 源文件。开发工具 PS(切图) sublime(代码) chrome࿰…...

一篇文章总结 SQL 基础知识点
1. 官方文档 MySQL:https://dev.mysql.com/doc/refman/8.4/en/ SQL Server:What is SQL Server? - SQL Server | Microsoft Learn Oracle:https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/loe.html 2. 术语 SQL S…...
vue Element U 解决表格数据不更新问题
最近在使用 Vue 和 Element UI 开发后台管理系统时,操作表单数据重新请求表格接口后遇到表格数据不更新的问题。后面查阅了些资料,这通常是由于 Vue 的响应式系统没有检测到数据的变化,或者数据更新后没有正确地触发视图的重新渲染。以下是一…...

PeView 命令行PE文件解析工具
PeView 是一款基于C/C开发的命令行版PE文件解析工具,专门用于解析Windows可执行文件并提供详尽的文件结构和交互式查询功能,帮助用户理解和分析目标程序的内部构成,是逆向分析和软件调试中的重要工具,本次分享工具源代码及使用方法…...

微信小程序25__实现卡片变换
先看效果图 实现代码如下: <view class"page" style"filter:hue-rotate({{rotation}}deg)"><view class"prev" catchtap"toPrev">《《《</view><view class"next" catchtap"toNext&q…...

使用Git进行团队协作开发
使用Git进行团队协作开发 Git简介 安装Git 在Windows上安装Git 在macOS上安装Git 在Linux上安装Git 设置Git用户信息 创建Git仓库 基本Git命令 添加文件 提交更改 查看状态 克隆仓库 推送更改 获取更改 分支管理 创建分支 切换分支 合并分支 删除分支 解决合并冲突 检查冲突…...

期货跟单、量化交易模拟演示系统
一、跟单下单 在“排行榜”中选择要跟单的用户,合约可以跟全部,也可以指定跟该用户的某一合约操作,选定跟单的倍数(操作手数的倍数)/手数(指定手数,可以不是对方的倍数),…...

Python小白学习教程从入门到入坑------第十八课 异常模块与包【下】(语法基础)
一、内置全局变量__name__ 在Python中,有一些内置的全局变量和特殊变量,它们是由Python解释器预定义的,可以在代码的任何地方直接使用。 这些变量通常用于提供关于当前解释器状态的信息,或者用于控制解释器的行为 在Python中&a…...

arcgis pro 3.3.1安装教程
一、获取方式: http://dt4.8tupian.net/2/29913a61b1500.pg3二、软件目录: 三、安装步骤: (1)安装软件运行环境windowsdesktop-runtime 8.0.4; (2)选中安装文件arcgispro_33zh_cn_190127.exe&…...

Spring 获取Cookie/Session
获取Cookie/Session Cookie & Session获取Cookie传统方法获取使用 Spring 获取 Cookie 获取Session传统方法使用 SpringBoot 获取 Session简洁获取 Session HTTP协议 自身是属于 无状态协议(默认情况下 HTTP 协议的客户端与服务端的这次通信,和下次的通信之间没…...
小红书接口数据查询优化指南
小红书,作为分享生活、购物心得与美妆护肤经验的热门社交媒体平台,对开发者而言,其数据接口具有极高的实用价值。本指南将聚焦于如何通过接口高效查询小红书数据,并提供清晰的步骤与示例代码。 一、前置准备 在深入查询之前&…...

数据结构 - 图
文章目录 一、图的基本概念二、图的储存结构1、邻接矩阵2、邻接表 三、图的遍历1、广度优先遍历2、深度优先遍历 四、最小生成树1、概念2、Kruskal算法3、Prim算法 五、最短路径问题1、单源最短路径--Dijkstra算法2、单源最短路径--Bellman-Ford算法3、多源最短路径--Floyd-War…...

如何在Linux系统中管理和优化Swap空间
如何在Linux系统中管理和优化Swap空间 Swap空间简介 检查Swap空间 创建Swap空间 创建Swap文件 创建Swap分区 配置Swap空间 编辑fstab文件 设置vm.swappiness Swap使用策略 调整vm.vfs_cache_pressure 设置vm.min_free_kbytes Swap空间的监控 使用top命令 使用free命令 Swap…...

瑞格智慧心理服务平台 NPreenSMSList.asmx sql注入漏洞复现
0x01 产品描述: 瑞格智慧心理服务平台是一个集心理测评、心理咨询、心理危机干预、心理放松训练等功能于一体的综合性心理健康服务平台。该平台由北京瑞格心灵科技有限公司开发,旨在为用户提供全方位的心理健康服务。0x02 漏洞描述:…...

大模型是否具备推理能力?解读苹果新论文:GSM-Symbolic和GSM8K
在人工智能领域,大模型的推理能力一直备受关注。OpenAI的GPT-4和其他大模型的表现令人惊叹,但究竟是否具备真正的数学推理和抽象逻辑能力?最近,苹果的研究人员发表了一篇题为“GSM-Symbolic:理解大语言模型中数学推理的…...

自动化部署-02-jenkins部署微服务
文章目录 前言一、配置SSH-KEY1.1 操作jenkins所在服务器1.2 操作github1.3 验证 二、服务器安装git三、jenkins页面安装maven四、页面配置自动化任务4.1 新建任务4.2 选择4.3 配置参数4.4 配置脚本 五、执行任务5.1 点击执行按钮5.2 填写参数5.3 查看日志 六、查看服务器文件七…...

HTB:Analytics[WriteUP]
目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Analytics? 2.What subdomain is configured to provide a different application on the target web server? 3.What application is running on data.analytical.htb? 4.What version of…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...