当前位置: 首页 > news >正文

今日总结10.29

常见序列化协议有哪些

序列化(serialization)是将对象序列化为二进制形式(字节数组),一般也将序列化称为编码(Encode),主要用于网络传输、数据持久化等。常见的序列化协议包括以下几种:

  1. JSON(JavaScript Object Notation)

    • 一种轻量级的数据交换格式,易于阅读和编写。
    • 它基于JavaScript语言的一个子集,但是可以被多种编程语言使用。
    • 支持复杂的数据结构,包括数组、对象、字符串、数字等。
    • 前后兼容性高,数据格式简单,易于读写,序列化后数据较小,可扩展性好,兼容性好。
    • 相对于XML,其协议比较简单,解析速度较快。但数据的描述性比XML差,不适合性能要求为毫秒级别的情况,且额外空间开销比较大。
    • 适用于跨防火墙访问、可调式性要求高的情况、基于Web browser的Ajax请求,以及传输数据量相对小、实时性要求相对低(例如秒级别)的服务等场景。
  2. XML(eXtensible Markup Language)

    • 一种标记语言,用于描述数据的结构和内容。
    • 具有良好的可扩展性和跨平台性,可以通过DTD(Document Type Definition)或者XSD(XML Schema Definition)定义数据的结构。
    • 序列化数据只包含数据本身以及类的结构,不包括类型标识和程序集信息。类必须有一个将由XmlSerializer序列化的默认构造函数,且只能序列化公共属性和字段,不能序列化方法。
    • 文件庞大,文件格式复杂,传输占带宽。
    • 常用于做配置文件存储数据、实时数据转换等场景。
  3. Protocol Buffers(protobuf)

    • 由Google开发的一种二进制序列化协议。
    • 使用简洁的接口描述语言来定义数据结构,并生成相应的代码进行序列化和反序列化操作。
    • 具有高效的编码和解码速度,以及较小的数据体积。
    • 序列化后码流小,性能高,是结构化数据存储格式。通过标识字段的顺序,可以实现协议的前向兼容,结构化的文档更容易管理和维护。
    • 需要依赖于工具生成代码,且支持的语言相对较少,官方只支持Java、C++、Python。
    • 适用于对性能要求高的RPC调用、具有良好的跨防火墙的访问属性的场景,也适合应用层对象的持久化。
  4. Thrift

    • 由Facebook开发的一种跨语言的服务框架,也包含了一种二进制序列化协议。
    • 使用IDL(Interface Description Language)来定义数据结构和服务接口,并生成相应的代码进行序列化和反序列化操作。
    • 支持多种编程语言,并提供了高效的网络通信能力。
    • 序列化后的体积小、速度快,支持多种语言和丰富的数据类型,对于数据字段的增删具有较强的兼容性,还支持二进制压缩编码。
    • 但使用者较少,跨防火墙访问时不安全,不具有可读性,调试代码时相对困难。不能与其他传输层协议共同使用(例如HTTP),也无法支持向持久层直接读写数据,即不适合做数据持久化序列化协议。
    • 常用于分布式系统的RPC解决方案等场景。
  5. MessagePack

    • 一种高效的二进制序列化协议,类似于JSON。
    • 将数据压缩为二进制格式,具有较小的数据体积和高速的编码解码能力。
    • 支持多种编程语言,并且可以与JSON相互转换。
  6. Avro

    • 一种基于Schema的二进制序列化协议,由Apache开发。
    • 使用JSON来定义数据结构,并将数据编码为紧凑的二进制格式。
    • 支持动态类型、架构演化和跨语言等特性。
    • Binary格式在空间开销和解析性能方面可以和Protobuf媲美,Avro的产生解决了JSON的冗长和没有IDL的问题。
    • 支持丰富的数据类型,简单的动态语言结合功能,具有自我描述属性,提高了数据解析速度。其快速可压缩的二进制数据形式可以实现远程过程调用RPC,并支持跨编程语言实现。
    • 对于习惯于静态类型语言的用户可能不太直观。
    • 适用于Hadoop中做Hive、Pig和MapReduce的持久化数据格式等场景。Avro的设计理念偏向于动态类型语言,因此对于动态语言为主的应用场景,Avro是更好的选择。
  7. Fastjson

    • 一个Java语言编写的高性能功能完善的JSON库。
    • 采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致。
    • 接口简单易用,是目前Java语言中最快的json库。
    • 但过于注重快,而偏离了“标准”及功能性,代码质量不高,文档不全。
    • 适用于协议交互、Web输出、Android客户端等场景。

为什么不推荐使用 JDK 自带的序列化

不推荐使用JDK自带的序列化(即java.io.Serializable)的原因主要有以下几点:

  1. 不支持跨语言调用
    • JDK自带的序列化方式高度依赖Java语言,序列化后的字节数组只能由Java语言反序列化,无法与其他编程语言(如C++、Python、Go等)进行无缝传输与反序列化。这在多语言、多平台交互的系统中会造成不便。
  2. 性能较差
    • JDK自带的序列化机制在序列化和反序列化过程中会产生较大的字节数组,增加了存储和传输的负担。
    • 相较于其他高效的序列化框架(如Protobuf、Thrift等),JDK自带的序列化方式在性能上显得较低,序列化速度相对较慢。
  3. 存在安全隐患
    • JDK自带的序列化和反序列化机制容易受到反序列化攻击。攻击者可以通过构造恶意输入数据,利用反序列化过程中的漏洞执行任意代码,造成系统安全漏洞。
    • 为了避免这些安全问题,需要开发者在序列化和反序列化过程中进行严格的校验和防护,这增加了开发的复杂性和风险。
  4. 可读性差
    • JDK自带的序列化方式生成的字节流是二进制数据,不易阅读和理解。这对于调试和排查问题来说是一个不利因素。
  5. 版本兼容性问题
    • 当类的定义发生变化时,如果没有妥善处理序列化ID(serialVersionUID)的一致性,可能会导致反序列化失败。这增加了维护和管理序列化数据的复杂性。

相关文章:

今日总结10.29

常见序列化协议有哪些 序列化(serialization)是将对象序列化为二进制形式(字节数组),一般也将序列化称为编码(Encode),主要用于网络传输、数据持久化等。常见的序列化协议包括以下几…...

使用 FastGPT 工作流实现 AI 赛博算卦,一键生成卦象图

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

vue3+ts实时播放视频,视频分屏

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

【网页设计】学成在线案例

Demo 典型的企业级网站&#xff0c;目的是为了整体感知企业级网站的布局流程&#xff0c;复习以前知识。 集合代码见文章最后。 5.1 准备素材和工具 学成在线 PSD 源文件。开发工具 PS&#xff08;切图&#xff09; sublime&#xff08;代码&#xff09; chrome&#xff0…...

一篇文章总结 SQL 基础知识点

1. 官方文档 MySQL&#xff1a;https://dev.mysql.com/doc/refman/8.4/en/ SQL Server&#xff1a;What is SQL Server? - SQL Server | Microsoft Learn Oracle&#xff1a;https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/loe.html 2. 术语 SQL S…...

vue Element U 解决表格数据不更新问题

最近在使用 Vue 和 Element UI 开发后台管理系统时&#xff0c;操作表单数据重新请求表格接口后遇到表格数据不更新的问题。后面查阅了些资料&#xff0c;这通常是由于 Vue 的响应式系统没有检测到数据的变化&#xff0c;或者数据更新后没有正确地触发视图的重新渲染。以下是一…...

PeView 命令行PE文件解析工具

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

微信小程序25__实现卡片变换

先看效果图 实现代码如下&#xff1a; <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命令 添加文件 提交更改 查看状态 克隆仓库 推送更改 获取更改 分支管理 创建分支 切换分支 合并分支 删除分支 解决合并冲突 检查冲突…...

期货跟单、量化交易模拟演示系统

一、跟单下单 在“排行榜”中选择要跟单的用户&#xff0c;合约可以跟全部&#xff0c;也可以指定跟该用户的某一合约操作&#xff0c;选定跟单的倍数&#xff08;操作手数的倍数&#xff09;/手数&#xff08;指定手数&#xff0c;可以不是对方的倍数&#xff09;&#xff0c;…...

Python小白学习教程从入门到入坑------第十八课 异常模块与包【下】(语法基础)

一、内置全局变量__name__ 在Python中&#xff0c;有一些内置的全局变量和特殊变量&#xff0c;它们是由Python解释器预定义的&#xff0c;可以在代码的任何地方直接使用。 这些变量通常用于提供关于当前解释器状态的信息&#xff0c;或者用于控制解释器的行为 在Python中&a…...

arcgis pro 3.3.1安装教程

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

Spring 获取Cookie/Session

获取Cookie/Session Cookie & Session获取Cookie传统方法获取使用 Spring 获取 Cookie 获取Session传统方法使用 SpringBoot 获取 Session简洁获取 Session HTTP协议 自身是属于 无状态协议(默认情况下 HTTP 协议的客户端与服务端的这次通信&#xff0c;和下次的通信之间没…...

小红书接口数据查询优化指南

小红书&#xff0c;作为分享生活、购物心得与美妆护肤经验的热门社交媒体平台&#xff0c;对开发者而言&#xff0c;其数据接口具有极高的实用价值。本指南将聚焦于如何通过接口高效查询小红书数据&#xff0c;并提供清晰的步骤与示例代码。 一、前置准备 在深入查询之前&…...

数据结构 - 图

文章目录 一、图的基本概念二、图的储存结构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 产品描述&#xff1a; ‌ 瑞格智慧心理服务平台‌是一个集心理测评、心理咨询、心理危机干预、心理放松训练等功能于一体的综合性心理健康服务平台。该平台由北京瑞格心灵科技有限公司开发&#xff0c;旨在为用户提供全方位的心理健康服务。0x02 漏洞描述&#xff1a;…...

大模型是否具备推理能力?解读苹果新论文:GSM-Symbolic和GSM8K

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

自动化部署-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…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...