目录

跨语言传输 xml json protobuf 数据交换格式

目录
  • XML (Extensible Markup Language) 可扩展标记语言是一种通用和重量级的数据交换格式。以文本结构存储。
  • JSON (JavaScript Object Notation) 是一种通用和轻量级的数据交换格式。以文本结构存储。
  • protobuf (Google Protocol Buffers) 是 Google 的一种独立和轻量级的数据交换格式。以二进制结构进行存储。

都可以做到语言无关,平台无关。由于现在有部分数据需要跨平台,跨语言传输,需要选择一个合适的方法,这里对他们的优缺点总结一下。

JSON XML
JSON 是一种数据格式 XML 是一种标记语言
与 XML 相比,JSON 数据更容易阅读 XML 文档相对来说阅读起来比较困难
JSON 数据可以存储在 .json 格式的文本文件中 XML 数据可以存储在 .xml 格式的文本文件中
JSON 中支持字符串、数字、数组、布尔值等类型 XML 中只有字符串类型
JSON 没有显示功能 XML 提供了显示数据的能力,因为它是一种标记语言
JSON 仅支持 UTF-8 编码 XML 支持各种编码
JSON 不支持注释 XML 支持注释
JSON 不支持命名空间 XML 支持命名空间
JSON 读写速度更快,且更容易解析 相对于 JSON,XML 数据结构更加复杂,解析速度相对较慢
相对于 XML,JSON 的安全性较低 相对于 JSON,XML 的安全性更高

使用 protobuf 代替 xml/json 的优点

  • 序列化数据体积小
  • 反序列化速度快

protobuf一般是根据proto文件自动化生成相关编解码文件,如果频繁修改proto文件,就得不断重新生成,比较麻烦

由于我传输的数据格式不是很复杂,且有板子性能限制,最后用了 protobuf ,可以从这里看 protobuf 怎么使用,搭载 linux 的硬件板子上可以用nanopb,nanopb 就是 string 字段不太好弄,需要给出 callback 函数,简单起见我直接用 options 文件给他设成定长,就可以变成 char 数组了。


还有一种数据交互格式叫 messagepack ,效率也比较高