一个简单的序列化系统 | rxi

这篇文章概述了一个简单而强大的序列化系统,使用 C 语言举例,但可应用于任何通用语言。

  • 系统特点:简单(约 200 行 C 代码且含错误处理)、可检查(序列化数据自描述可转换为文本格式便于检查)、快速(存储为二进制可线性读取无中间表示,写时状态少)、健壮(格式前后兼容可部分读取)。
  • 数据存储方式:以连续值系列存储,每个值由表示类型的“标签”字节和数据组成,如 64 位浮点数用 TYPE_F64 标签字节后接 8 字节存储浮点数。字符串用标签字节、表示长度的整数和字符串数据存储,结尾可加 null 字节。
  • 支持的数据结构:除标量值和字符串外,还支持数组和对象,数组存储一系列值,对象存储一系列键值对,两者在读取时通过迭代函数处理,可跳过未处理数据。
  • 写入函数:有一系列写入不同类型数据的函数,如 write_f64、write_bool 等,将数据按标签字节和实际数据写入文件。
  • 读取函数:核心是 read 函数,用于读取单个值作为标签联合,还提供了用于对象和数组的迭代函数 iter_object 和 iter_array,可跳过未处理数据,同时提供 safe_read 函数用于安全读取数据。
  • 检查功能:可将序列化数据转换为人类可读的文本,通过 print_value 函数实现,方便验证数据和比较不同版本的序列化数据。
  • 字符串内联支持:存储很多对象时可支持字符串内联以简化,写入时检查字符串是否已写入,若已写入则写入 TYPE_STRINGREF 标签和偏移量,读取时遇到 TYPE_STRINGREF 跳转到对应偏移量继续处理。
阅读 8
0 条评论