CoderTools

MessagePack 编解码器

MessagePack 二进制序列化格式编码与解码

🔒 100% 本地处理您输入的数据完全在浏览器中处理,不会上传到任何服务器。

粘贴从 API 响应、日志文件或网络抓包中获取的 MessagePack 数据

点击插入示例数据

解码结果

输入 MessagePack 数据并点击解码查看结果

MessagePack 数据类型参考

类型名称 格式字节范围 说明
正定长整数0x00-0x7F0 到 127 的整数(单字节)
负定长整数0xE0-0xFF-32 到 -1 的整数(单字节)
定长映射0x80-0x8F包含 0-15 个键值对的映射
定长数组0x90-0x9F包含 0-15 个元素的数组
定长字符串0xA0-0xBF长度为 0-31 字节的字符串
空值0xC0表示 null/nil 值
布尔值0xC2-0xC3True (0xc3) 或 False (0xc2)
二进制0xC4-0xC6原始二进制数据(bin8/bin16/bin32)
扩展类型0xC7-0xC9, 0xD4-0xD8带类型码的应用自定义类型
浮点数0xCA-0xCB32 位或 64 位浮点数
无符号整数0xCC-0xCF8/16/32/64 位无符号整数
有符号整数0xD0-0xD38/16/32/64 位有符号整数
字符串0xD9-0xDBUTF-8 字符串(str8/str16/str32)
数组0xDC-0xDD16 位或 32 位长度的数组
映射0xDE-0xDF16 位或 32 位长度的映射

MessagePack 协议文档

MessagePack 简介

MessagePack 是一种高效的二进制序列化格式。由古橋貞之于 2008 年创建,它将类 JSON 的数据结构打包成紧凑的二进制表示,通常比 JSON 小 50%,同时解析速度更快。该格式被 Redis、Fluentd 以及众多对性能要求较高的实时通信系统广泛采用。

二进制编码结构

MessagePack 采用类型-长度-值(TLV)编码方案。第一个字节(格式字节)决定数据类型,对于小整数和短字符串可能直接包含值本身。较大的值使用额外字节存储长度和数据载荷。这种设计使得 MessagePack 能够极其高效地编码小值,同时也支持大型数据结构。

格式字节 含义
0x00-0x7F正定长整数(0-127,值在字节中)
0x80-0x8F定长映射(0-15 对,计数在低 4 位)
0x90-0x9F定长数组(0-15 元素,计数在低 4 位)
0xA0-0xBF定长字符串(0-31 字节,长度在低 5 位)
0xC0-0xDFNil、布尔、bin、ext、float、int 类型
0xE0-0xFF负定长整数(-32 到 -1)

MessagePack 与 JSON 对比

两种格式表示相同的数据模型,但针对不同场景进行了优化。MessagePack 优先考虑紧凑体积和解析速度,非常适合高吞吐量系统。JSON 优先考虑人类可读性和跨平台的通用兼容性。

MessagePack 优势
  • 比 JSON 小 30-50%
  • 原生支持二进制数据
  • 序列化和解析速度更快
  • 类型安全,区分不同整数类型
JSON 优势
  • 人类可读可编辑
  • 浏览器和编程语言普遍支持
  • 调试和日志记录更方便

常见应用场景

  • Redis 数据序列化和缓存
  • 实时通信协议(游戏、聊天)
  • Fluentd 日志聚合与转发
  • RPC 框架(MessagePack-RPC)
  • 带宽受限的移动和嵌入式应用

扩展类型

MessagePack 支持应用自定义的扩展类型。每个扩展包含一个类型码(-128 到 127 的整数)和二进制载荷。常见的标准扩展包括时间戳(类型 -1),用于存储秒和纳秒以实现精确的时间表示。

类型码 常见用途
-1时间戳(官方标准)
0-127应用自定义类型

快捷菜单

暂无访问记录