什么是 序列化?

序列化是将复杂数据结构或对象转换为可存储、传输或稍后重建的格式的过程,通常表现为字节流或文本表示。

快速了解

全称数据序列化
创建时间1960 年代(概念),2001 年(JSON 规范)
规范文档官方规范

工作原理

序列化将内存中的数据结构、对象或状态转换为适合存储在文件、数据库中或通过网络传输的线性格式。逆向过程称为反序列化,用于从序列化格式重建原始数据。常见的序列化格式包括 JSON(人类可读,广泛用于 Web API)、XML(冗长但灵活)、YAML(人性化配置)、Protocol Buffers(Google 的高效二进制格式)和 MessagePack(二进制 JSON 替代方案)。序列化格式的选择取决于人类可读性、文件大小、解析速度和语言兼容性等需求。序列化是数据持久化、缓存、进程间通信和分布式系统的基础。安全考虑包括避免反序列化不受信任的数据,这可能导致远程代码执行漏洞。

主要特点

  • 将复杂数据结构转换为线性格式
  • 实现数据持久化和传输
  • 支持多种格式(JSON、XML、YAML、二进制)
  • 可通过反序列化逆向还原
  • 必须处理循环引用和复杂类型
  • 对分布式系统和 API 至关重要

常见用途

  1. 客户端和服务器之间的 API 数据交换
  2. 将应用程序状态保存到文件或数据库
  3. 为性能优化缓存对象
  4. 进程间通信(IPC)
  5. 配置文件存储

示例

loading...
Loading code...

常见问题

序列化和反序列化有什么区别?

序列化是将内存中的数据结构或对象转换为可存储或传输的格式(如字节流或文本)的过程。反序列化则是相反的过程,将序列化后的数据还原为原始的数据结构或对象。这两个过程是互逆的,共同实现数据的持久化和跨系统传输。

JSON 和二进制序列化格式(如 Protocol Buffers)各有什么优缺点?

JSON 的优点是人类可读、易于调试、语言无关且广泛支持;缺点是文件体积较大、解析速度较慢。Protocol Buffers 等二进制格式的优点是体积小、解析快、支持模式演进;缺点是不可直接阅读、需要预定义模式。选择取决于具体需求:API 通信常用 JSON,高性能场景则倾向二进制格式。

序列化时如何处理循环引用?

循环引用是指对象之间相互引用形成闭环。处理方法包括:使用引用标识符替代实际对象、忽略循环引用的属性、使用支持循环引用的序列化库(如某些语言的特殊序列化器)、或重新设计数据结构避免循环引用。JSON 原生不支持循环引用,需要额外处理。

反序列化不受信任的数据有什么安全风险?

反序列化不受信任的数据可能导致严重的安全漏洞,包括远程代码执行(RCE)、拒绝服务攻击(DoS)和数据篡改。攻击者可以构造恶意序列化数据,在反序列化时执行任意代码。防护措施包括:验证数据来源、使用安全的序列化库、限制可反序列化的类型、以及对输入数据进行严格校验。

如何选择合适的序列化格式?

选择序列化格式需考虑以下因素:可读性需求(调试友好选 JSON/YAML)、性能要求(高性能选 Protocol Buffers/MessagePack)、跨语言兼容性、文件大小限制、模式演进需求、以及团队熟悉程度。Web API 通常使用 JSON,配置文件常用 YAML 或 TOML,高性能 RPC 则选择二进制格式。

相关工具

相关术语

相关文章