序列化与反序列化详解

一、核心定义

1. 序列化(Serialization)

序列化是将内存中的对象(或数据结构)转换为可存储(如存入文件、数据库)或可传输(如通过网络发送给其他系统)的二进制流(或 XML/JSON 等结构化格式)的过程

简单说,就是把内存中 "活" 的、只能被当前程序直接使用的数据,变成一种 "静态" 的、可脱离当前程序独立存在的数据格式。

2. 反序列化(Deserialization)

反序列化是序列化的逆过程,指将序列化后得到的二进制流(或 XML/JSON 等格式数据)重新转换为内存中的对象(或数据结构),使其能够被程序再次直接操作和使用的过程。

二、核心目的

序列化与反序列化的核心价值是解决数据持久化跨平台 / 跨进程数据传输的问题:

  • 数据持久化:将内存中的临时数据保存到磁盘、数据库等持久化存储介质中,程序重启后可通过反序列化恢复数据(如游戏存档、用户配置保存)。
  • 跨介质 / 跨进程传输:在网络通信(如接口调用、分布式系统通信)、进程间通信中,将数据转换为标准格式进行传输,接收方通过反序列化还原数据(如前端向后端传递 JSON 数据、微服务之间的通信)。

三、通俗类比

可以用 "打包" 和 "解包" 来理解:

  • 序列化 = 打包:把家里的零散物品(内存中的对象)整理装箱(转换为二进制流 / JSON 等格式),方便存放(持久化)或快递(网络传输)。
  • 反序列化 = 解包:收到快递后,将箱子里的物品重新取出、还原成原来的摆放状态(内存中的对象),方便使用。

四、数据形态变化

  • 序列化前:数据以内存对象 / 数据结构形态存在,具有临时性、只能被当前程序直接访问(如 Java 中的 User 对象、Python 中的字典、C# 中的 List 集合)。
  • 序列化后:数据以二进制流、JSON 字符串、XML 字符串等形态存在,具有持久性、可跨环境传输(如文件中的二进制数据、接口返回的 JSON 字符串)。
  • 反序列化后:数据重新恢复为内存对象 / 数据结构形态,可被程序直接调用、修改、遍历等。

五、两者的关联

  1. 互逆性:反序列化是序列化的逆向操作,序列化的输出(序列化后的数据)是反序列化的输入,两者配合完成 "数据保存 / 传输 - 数据恢复使用" 的闭环。
  2. 依赖性:反序列化需要依赖序列化时的规则(如数据格式、对象结构定义),若序列化与反序列化的规则不一致(如序列化用 JSON、反序列化按 XML 解析),会导致反序列化失败或数据错乱。

六、常见示例

  • 前端向后端提交表单数据:前端将表单数据序列化为 JSON 字符串,通过 HTTP 请求传输到后端;后端接收 JSON 字符串后,反序列化为后端语言的对象(如 Java 的 User、Python 的 dict)进行处理。
  • 游戏存档:游戏运行时将玩家等级、装备、进度等数据封装为对象,序列化后保存为本地文件;下次启动游戏时,读取存档文件,通过反序列化还原玩家数据,恢复游戏进度。
  • 分布式系统通信:微服务 A 将业务数据序列化为二进制流,通过 RPC 框架传输到微服务 B;微服务 B 将二进制流反序列化为可操作的对象,执行后续业务逻辑。

总结

  1. 序列化:内存对象 → 可存储 / 传输的格式(打包),解决数据持久化和跨环境传输问题。
  2. 反序列化:可存储 / 传输的格式 → 内存对象(解包),是序列化的逆过程。
  3. 两者核心是完成 "临时数据" 与 "持久 / 可传输数据" 的相互转换,支撑跨程序、跨平台的数据交互。
相关推荐
端平入洛26 分钟前
delete又未完全delete
c++
端平入洛1 天前
auto有时不auto
c++
哇哈哈20212 天前
信号量和信号
linux·c++
多恩Stone2 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马2 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
超级大福宝2 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
weiabc2 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
问好眼2 天前
《算法竞赛进阶指南》0x01 位运算-3.64位整数乘法
c++·算法·位运算·信息学奥赛
yyjtx2 天前
DHU上机打卡D31
开发语言·c++·算法
czxyvX2 天前
020-C++之unordered容器
数据结构·c++