当前位置: 首页 > news >正文

常用数据格式:json、bson、msgpack

JSON(JavaScript Object Notation)

  • 常用文件格式,可读性高

  • 一般用于远端配置,客户端基础配置等。


BSON(Binary JSON)

  • 二进制的Json,一般用于服务器MongoDB存储。

  • 类型定义:https://bsonspec.org/spec.html

{"hello": "world"} →
\x16\x00\x00\x00           // total document size
\x02                       // 0x02 = type String
hello\x00                  // field name
\x06\x00\x00\x00world\x00  // field value
\x00                       // 0x00 = type EOO ('end of object')
  • 和json的差异: https://www.mongodb.com/json-and-bson

    • 更紧凑:二进制存储数据,json是字符类型,bson有时间类型,二进制对象等,更省空间。

    • 更快解析:json反序列化需要逐个字符解析,bson有记录类型和长度,可以更快解析。

    • 修改更快:json数据存储无类型,比如你要修改基本一个值,从9到10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。而使用BSON,你可以指定这个列为数字列,那么无论数字从9长到10还是100,我们都只是在存储数字的那一位上进行修改,不会导致数据总长变大。当然,在MongoDB中,如果数字从整形增大到长整型,还是会导致数据总长变大的。

    • 二进制可读性差。


msgpack(MessagePack)

  • 二进制的json,常用于通信数据包装。https://msgpack.org/

  • 类型定义:https://github.com/msgpack/msgpack/blob/master/spec.md

    在这里插入图片描述

  • 比bson数据更紧凑,没有\x00结尾、类型和长度组成一个字节等。

  • 服务器gs和客户端lua都是一样名字的接口:msgpack.pack(table)


protobuf(Protocol Buffers)

  • https://github.com/protocolbuffers/protobuf

  • 常用协议格式,也是二进制,但我们游戏没用这个,主要是要预先定义数据格式(每次增删协议都要维护),有点像unity的Serializable。

  • 某些情况比MessagePack压缩解析更快。

  • 协议格式:标签号+类型号 | 数据大小 | 具体数据

enum Corpus {
  CORPUS_UNSPECIFIED = 0;
  CORPUS_UNIVERSAL = 1;
  CORPUS_WEB = 2;
  CORPUS_IMAGES = 3;
}

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
  Corpus corpus = 4;
}

MemoryPack

  • https://github.com/Cysharp/MemoryPack

  • 相比其他数据封装读取更快,但压缩不一定更好。

相关文章:

  • POI 的 Excel 读写操作教程
  • Ubuntu 22.04 - OpenLDAP安装使用(服务器+LAM+客户端)
  • 对正则表达式说不!!!
  • 【Android开发】华为手机安装包安装失败“应用是非正式版发布版本,当前设备不支持安装”问题解决
  • CentOS本机配置为时间源
  • 自定义基座实时采集uniapp日志
  • depcheck检查node.js项目中未使用和缺失依赖的工具
  • 【Apache Paimon】-- 作为一名小白,如何系统地学习 Apache paimon?
  • Ansible批量配置服务器免密登录步骤详解
  • 【pytest】获取所有用例名称并存于数据库
  • 联想电脑如何进入BIOS?
  • 新数据结构(9)——Java异常体系
  • AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI
  • 【Vue3 入门到实战】15. 组件间通信
  • CEF132 编译指南 Linux 篇 - 构建编译环境:工具链配置(二)
  • DatePicker 实现:日期范围截止时间为23:59:59
  • 蓝桥杯备赛笔记(二)
  • 番外04:前端面试八股文-HTML
  • QML 快捷键与Shortcut的使用
  • 一个简单的Windows TCP服务器实现
  • 无限流量网站建设/google chrome官网
  • 宿州市建设局网站/百度商城官网
  • 炫酷一些的网站/百度seo公司哪家好一点
  • w78企业网站后台怎么做/昆明新闻头条最新消息
  • 哪个网站建设商招代理/哪家网络推广好
  • 58网站一起做网店/如何做网站建设