今日总结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…...
【每日题解】3211. 生成不含相邻零的二进制字符串
给你一个正整数 n。 如果一个二进制字符串 x 的所有长度为 2 的 子字符串 中包含 至少 一个 "1",则称 x 是一个 有效 字符串。 返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。 示例 1: 输入: n 3 输出&a…...
Nginx、Tomcat等项目部署问题及解决方案详解
目录 前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的常见原因 2. 端口开启问题2.1 Windows环境下的端口开放2.2 Linux环境下的端口开放 3. 重视日志分析3.1 Nginx日志分析3.2 Tomcat日志分析 4. 开发环境与部署后运行结果不同4.1 开发环境与生产…...
【PythonWeb开发】Flask-RESTful参数解析
flask-restful中的reqparse.RequestParser是一个用于解析和验证参数的工具。它可以帮助开发者从请求中提取参数,并确保这些参数符合预期的格式和类型。参数解析的意思就是规范化传入的参数并获取到这些参数。 一、什么是 reqparse.RequestParser? reqpa…...
gcc与mingw64版本介绍
三类编译器 GCC,全称为GNU Compiler Collection,是一个强大的编译器集合,它不仅支持C和C语言,还支持Fortran、Ada、Java等多种编程语言的编译。在GCC工具链中,gcc和g是两个核心的编译器工具。gcc是专门用于编译C语言程…...
CSS3新增长度单位
CSS3新增长度单位 rem:根元素字体的倍数,只与根元素字体大小有关;vw:占视口宽度的百分比;vh:占视口高度的百分比;vmax:占视口中宽和高最大的百分比;vmin:占视…...
【Spring】创建Spring项目前的配置工作
🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼文章收录于:Spring 目录 1.下载Spring Initializr 2.配置Spring国内源 3.添加Spring框架的支持(pom.xml) 4.刷新Maven仓…...
docker 安装部署 nginx
命令 docker run \ -p 15008:80 \ --name nginx1.21.6 \ -v /iepms/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /iepms/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /iepms/nginx/log:/var/log/nginx \ -v /iepms/nginx/html:/usr/share/nginx/html \ -d 192.168.1.103…...
黑马数据库学习笔记
课程地址 (基础篇)MySQL的启动 mysql 默认使用 3306 端口 在 centos下,启动 mysql 数据库:service mysqld start; 查看状态/启动/停止/重启:systemctl status/start/stop/restart mysqld; 登录到mysql数据库&…...
MYSQL-SQL-03-DQL(Data Query Language,数据查询语言)(单表查询)
DQL(数据查询语言) DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。 查询关键字: SELECT 在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访…...
【数据结构和算法】三、动态规划原理讲解与实战演练
目录 1、什么是动态规划? 2、动态规划实战演练 2.1 力扣题之爬楼梯问题 (1)解题思路1: (2)解题思路2: (3)动态规划(DP):解题思路 (4&#x…...
如何做网站备案/搜索引擎营销的主要方法包括
今天在做 wrap 的测试实验的时候,出现一个很奇怪的现象,就是加密不成功。具体表现为:1.加密后的文件大小为0kb。 2.加密后的文件仍然可视。 具体测试步骤如下: D:\Just4work\someSQLs>wrap inametest_oracle_warp.sqlPL/SQL Wr…...
组织部建设网站示范材料/网站关键词优化工具
装饰模式:在不改变原类(对象)和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象。在设计原则中,有一条,多用组合,少用继承,装饰模式正是…...
wordpress页面加载时间代码/网站关键词优化wang
最近我不得不在 Laravel 7 实现 通用唯一识别码 ( UUIDs ),并遇到一些问题。我希望这帖子可为其他正在做相同事情的人解惑。 使用 UUIDs 的高级理由 A) 它们从你的 统一资源定位符 移除编号的 身份识别号 ,故用户不能看到你的应…...
注销网站备案时间/发布软文是什么意思
VMware 中 Ubuntu的安装 步骤 1.文件>新建虚拟机 2.下一步 3.下一步 4.稍后安装操作系统 5.下一步 6.自己取创建的虚拟机名字和存放路径 7.根据自己电脑的配置选择配置 8.选择虚拟机的内存,一般为2G 9.默认下一步 10.下一步 11.下一步 12.选择创建新虚拟磁盘 1…...
广州自助网站推广制作/企业官网seo
内联汇编使用“__asm”(C)和“asm”(C和C)关键字声明,语法格式如下所示,内联汇编支持大部分的ARM指令,但不支持带状态转移的跳转指令,如BX和BLX 指令 __asm("instruction[;instruction]&q…...
cc插件 wordpress/如何推广微信公众号
经典动态规划问题。用dp[i][j]表示字符串s的以i开头,以j结尾的子串的最大回文子序列的长度。我们要求的s的最长回文子序列的长度就是dp[0][n - 1]。考虑一下数组的初始化,对于所有的i(0 < i < n),都有dp[i][i] 1,表示单个字…...