定义:

  • 序列化:将内存中的对象(或数据结构)转换为可存储或可传输的标准化格式(如字节流,json,xml)。如:将 Person 对象转换为 {"name": "Alice", "age": 30}
  • 反序列化:将标准化格式的数据恢复为内存中的对象(或原数据结构)。如:将{"name": "Bob", "age": 25}转换为Person对象。
序列化是对象到数据的封装,反序列化是数据到对象的解封

区别:

特性 序列化 反序列化
方向 对象 → 数据 数据 → 对象
目的 持久化存储、网络传输、跨语言交互 恢复对象状态、读取数据
典型场景 保存文件、API发送数据、缓存 加载文件、API接收数据、读取缓存
常见格式 JSON、XML、二进制(如Protocol Buffers) 同左,需与序列化格式一致

注意事项:

  1. 格式兼容性:序列化和反序列化需要使用同一格式,跨语言场景优先选择通用场景(如json xml)
  2. 版本控制:当对象结构变更时(增删字段)时,旧序列化数据可能无法正常反序列化,需使用兼容策略(如Protobuf的字段编写)。
  3. 安全风险:反序列化不可信数据可能导致代码注入(如Java反序列化漏洞)。

应用场景:

  1. 缓存系统:
  2. 微服务通讯:服务A将对象序列化为JSON通过HTTP发送,服务B反序列化使用。
  3. 游戏存档:将玩家状态序列化保存到文件,加载时反序列化恢复。