定义:
-
序列化:将内存中的对象(或数据结构)转换为可存储或可传输的标准化格式(如字节流,json,xml)。如:将 Person 对象转换为 {"name": "Alice", "age": 30}
- 反序列化:将标准化格式的数据恢复为内存中的对象(或原数据结构)。如:将{"name": "Bob", "age": 25}转换为Person对象。
序列化是对象到数据的封装,反序列化是数据到对象的解封。
区别:
特性 | 序列化 | 反序列化 |
---|---|---|
方向 | 对象 → 数据 | 数据 → 对象 |
目的 | 持久化存储、网络传输、跨语言交互 | 恢复对象状态、读取数据 |
典型场景 | 保存文件、API发送数据、缓存 | 加载文件、API接收数据、读取缓存 |
常见格式 | JSON、XML、二进制(如Protocol Buffers) | 同左,需与序列化格式一致 |
注意事项:
- 格式兼容性:序列化和反序列化需要使用同一格式,跨语言场景优先选择通用场景(如json xml)
- 版本控制:当对象结构变更时(增删字段)时,旧序列化数据可能无法正常反序列化,需使用兼容策略(如Protobuf的字段编写)。
- 安全风险:反序列化不可信数据可能导致代码注入(如Java反序列化漏洞)。
应用场景:
- 缓存系统:
- 微服务通讯:服务A将对象序列化为JSON通过HTTP发送,服务B反序列化使用。
- 游戏存档:将玩家状态序列化保存到文件,加载时反序列化恢复。