什么是 序列化?
序列化是将复杂数据结构或对象转换为可存储、传输或稍后重建的格式的过程,通常表现为字节流或文本表示。
快速了解
| 全称 | 数据序列化 |
|---|---|
| 创建时间 | 1960 年代(概念),2001 年(JSON 规范) |
| 规范文档 | 官方规范 |
工作原理
序列化将内存中的数据结构、对象或状态转换为适合存储在文件、数据库中或通过网络传输的线性格式。逆向过程称为反序列化,用于从序列化格式重建原始数据。常见的序列化格式包括 JSON(人类可读,广泛用于 Web API)、XML(冗长但灵活)、YAML(人性化配置)、Protocol Buffers(Google 的高效二进制格式)和 MessagePack(二进制 JSON 替代方案)。序列化格式的选择取决于人类可读性、文件大小、解析速度和语言兼容性等需求。序列化是数据持久化、缓存、进程间通信和分布式系统的基础。安全考虑包括避免反序列化不受信任的数据,这可能导致远程代码执行漏洞。
主要特点
- 将复杂数据结构转换为线性格式
- 实现数据持久化和传输
- 支持多种格式(JSON、XML、YAML、二进制)
- 可通过反序列化逆向还原
- 必须处理循环引用和复杂类型
- 对分布式系统和 API 至关重要
常见用途
- 客户端和服务器之间的 API 数据交换
- 将应用程序状态保存到文件或数据库
- 为性能优化缓存对象
- 进程间通信(IPC)
- 配置文件存储
示例
Loading code...常见问题
序列化和反序列化有什么区别?
序列化是将内存中的数据结构或对象转换为可存储或传输的格式(如字节流或文本)的过程。反序列化则是相反的过程,将序列化后的数据还原为原始的数据结构或对象。这两个过程是互逆的,共同实现数据的持久化和跨系统传输。
JSON 和二进制序列化格式(如 Protocol Buffers)各有什么优缺点?
JSON 的优点是人类可读、易于调试、语言无关且广泛支持;缺点是文件体积较大、解析速度较慢。Protocol Buffers 等二进制格式的优点是体积小、解析快、支持模式演进;缺点是不可直接阅读、需要预定义模式。选择取决于具体需求:API 通信常用 JSON,高性能场景则倾向二进制格式。
序列化时如何处理循环引用?
循环引用是指对象之间相互引用形成闭环。处理方法包括:使用引用标识符替代实际对象、忽略循环引用的属性、使用支持循环引用的序列化库(如某些语言的特殊序列化器)、或重新设计数据结构避免循环引用。JSON 原生不支持循环引用,需要额外处理。
反序列化不受信任的数据有什么安全风险?
反序列化不受信任的数据可能导致严重的安全漏洞,包括远程代码执行(RCE)、拒绝服务攻击(DoS)和数据篡改。攻击者可以构造恶意序列化数据,在反序列化时执行任意代码。防护措施包括:验证数据来源、使用安全的序列化库、限制可反序列化的类型、以及对输入数据进行严格校验。
如何选择合适的序列化格式?
选择序列化格式需考虑以下因素:可读性需求(调试友好选 JSON/YAML)、性能要求(高性能选 Protocol Buffers/MessagePack)、跨语言兼容性、文件大小限制、模式演进需求、以及团队熟悉程度。Web API 通常使用 JSON,配置文件常用 YAML 或 TOML,高性能 RPC 则选择二进制格式。