Swift中可用的数据序列化格式

大家好,

在本文中,我想向您展示JSON序列化的许多替代方法。 它们都有优点和缺点,但至少您应该对它们有所了解。

什么是序列化?

“在 计算机科学中 ,在数据存储的上下文中, 序列化 是将 数据结构 对象 状态转换为可以稍后存储或传输和重构的格式 的过程 。”还有一个反序列化概念,它会将序列化数据反转为我们的自定义对象。 我已经写了一篇关于它的文章。

我们在哪里使用序列化?

  • 通过网络传输数据。
  • 存储数据。
  • 远程过程调用。 (RPC)

JSONXMLprotobufYAMLBSONMessagePack是数据序列化的示例。 我猜最知名的是移动应用程序开发中的JSON和XML。 与JSON相比,使用JSON的首选多于XML,因为JSON的可读性更好,而且尺寸更小。

JSON (JavaScript对象表示法):它是人类易读的并且易于由机器解析和生成,这就是为什么它被选中的原因。 但是在我看来,可读的响应格式对于检查数据类型非常重要,这使得JSON更加紧密。 Swift有很多第三方库可用于JSON序列化和反序列化。 您可以在这里检查。 在我以前的文章中,您还可以看到其中的一些示例。

  //简单的JSON格式示例 
{
“名称”:“阿里可以”
“姓”:“巴图尔”
“年龄”:29
}

XML (可扩展标记语言):定义了一组规则,用于以人类可读和机器可读的格式对文档进行编码。 XML难以辨认且复杂,因此不太受欢迎。 解析它还需要比JSON和其他方法更多的工作。 您可以在此处找到第三方解析器。 这里也有对此的SDK(基础)支持。

   
Ali Can
巴图尔
29

protobuf (Google的协议缓冲区):“ 协议缓冲区是一种用于序列化结构化数据的灵活,高效,自动化的机制。 您定义要一次构造数据的方式,然后可以使用生成的特殊源代码轻松地使用各种语言在各种数据流中写入和读取结构化数据。 您甚至可以更新数据结构,而不会破坏已按照“旧”格式编译的已部署程序。” Google说。 我认为在将来,我们将不需要编写响应模型对象。 一个API和客户端文件就足够了。 本身也支持此技术。 我想写一篇有关protobufs的博客文章。 让我听听您对protobuf的意见

  // .proto文件的示例内容。 
留言人{
int32年龄= 1;
字符串名称= 2;
字符串姓氏= 3;
}

YAML (YAML不是标记语言):YAML是所有编程语言的可读数据序列化标准。 无需括号或引号。 语法支持关系数据。 特别用于查看/编辑数据结构:例如配置文件,调试过程中的转储。 这里是一个YAML框架。

- name: Ali Can 
surname: Batur
age: 29
devices:
- iPhone 7
- Apple Watch Series 2
- Macbook Pro

BSON (二进制JSON):这是类似JSON的文档的二进制编码序列化。 它还包含一些扩展,这些扩展允许表示不属于JSON规范的数据类型。 JSON是纯文本格式,虽然二进制数据可以用文本进行编码,但它具有一定的局限性,并且会使JSON文件很大。 BSON来解决这些问题。 您可以在这里找到图书馆。

MessagePack:就像JSON,但是又快又小。 这是另一种二进制格式的序列化。 它比BSON小,支持类型检查(静态类型)。 您可以在此处找到一个库。

结论

在现实生活中的示例中,JSON是移动应用程序开发中处理请求-响应数据传输的首选方法。 我还对所有项目都使用JSON,因为它易于阅读,可以加快我的工作速度。 其他序列化格式在最适合的地方很有用。 例如,将YAML用作您的配置文件类型。 尽管JSON非常方便,但我最想知道protobuf。 我想,它将为客户端-服务器体系结构提供新的视角。 顺便说一句,protobuf并不新鲜,但我认为它将越来越流行。

感谢您的阅读,随时发表评论。