今日总结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…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
