跨语言传输 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 ,效率也比较高