什么是序列化?
序列化(Serialization)是指将对象(object)或数据结构(data structure)转换为一种适合在网络中传输或存储(例如,在数组缓冲区(array buffer)或文件格式中)的格式的过程。简单来说,就是把内存中的“活”数据变成可以“打包带走”的静态字节流。
在 JavaScript 中,一个典型的例子是:你可以通过调用JSON.stringify()函数,将一个对象序列化为 JSON 字符串。同样,CSS 样式值也可以通过调用CSSStyleDeclaration.getPropertyValue()函数进行序列化,从而获取其字符串表示形式。
为什么需要序列化?
序列化的核心价值在于“跨域”与“跨时”。它解决了两个关键问题:
- 网络传输:当数据需要从一个进程发送到另一个进程(例如,从浏览器到服务器),或者通过 HTTP 协议传递时,必须先将对象转换为文本或二进制格式,才能放入网络包中。
- 持久化存储:当需要将数据保存到磁盘(如文件、数据库)时,序列化后的格式可以保证数据在程序重启后仍然能够被恢复。
没有序列化,对象只能存在于内存中,无法被外部系统识别或复用。
常见序列化格式与工具
除了 JSON,常见的序列化格式还包括 XML、YAML、Protocol Buffers(protobuf)等。每种格式都有其适用场景:
- JSON:轻量、易读,是 Web API 中最常用的数据交换格式。
- XML:结构严谨,支持命名空间,常用于配置文件或文档标记。
- Protocol Buffers:二进制格式,体积小、解析快,适合高性能 RPC 场景。
在 JavaScript 生态中,JSON.stringify()是最直接的序列化入口;而在 CSS 中,getPropertyValue()则负责将计算后的样式值序列化为字符串。
序列化的反过程:反序列化
与序列化相对的是反序列化(Deserialization),即将序列化后的格式重新还原为对象或数据结构。例如,JSON.parse()可以将 JSON 字符串还原为 JavaScript 对象。两者通常成对出现,构成完整的数据生命周期。
理解序列化,有助于你更好地设计 API 接口、处理缓存、以及调试网络请求中的数据格式。
译文来源:MDN Serialization(CC BY-SA 2.5 (MDN)),由本人翻译整理,转载请注明出处。