MessagePack 解析器
MessagePack 是一种高效的二进制序列化格式,类似 JSON 但更小更快。它被用于 Redis、Fluentd 和许多 RPC 系统。此工具解析 MessagePack 文件,并以带有类型和大小元数据的 JSON 形式显示内容。
规范
常见用例
- 调试 MessagePack 编码的 API 响应
- 检查使用 MessagePack 序列化的 Redis 缓存数据
- 分析 Fluentd 日志消息
- 将 MessagePack 转换为 JSON 用于日志记录或调试
- 理解 MessagePack 格式的 RPC 载荷
功能
- 通过拖放或文件选择解析 MessagePack 二进制文件
- 解码十六进制编码的 MessagePack 数据
- 支持所有 MessagePack 类型,包括扩展类型
- 转换为 JSON 以提高可读性
- 显示文档元数据(大小、类型计数、最大深度)
- 显示扩展类型信息
- 处理二进制数据和时间戳
- 用于原始二进制检查的十六进制查看器
示例
提示
- 你可以直接粘贴十六进制编码的 MessagePack 数据来解析。
- MessagePack 通常是等效 JSON 大小的 50-80%。
- 扩展类型(负类型码)是应用程序定义的。
- 时间戳使用扩展类型 -1,有多种精度格式。
- 某些实现使用扩展类型 1 表示时间戳。
理解 MessagePack 解析器
MessagePack 是一种二进制序列化格式,旨在尽可能紧凑,同时保持与 JSON 兼容的数据模型。由古桥贞之创建,MessagePack 使用自描述的二进制格式编码数据,其中类型信息和数据交错排列,允许无需外部 Schema 即可高效解析。
该格式使用可变长度编码方案。小整数(0-127)仅占一个字节。短字符串在类型字节中包含其长度。映射和数组使用紧凑的长度前缀。这种设计通常产生等效 JSON 大小 50-80% 的载荷,并且由于没有文本解析开销,序列化和反序列化速度显著更快。
MessagePack 支持 nil、布尔值、整数(有符号和无符号最高 64 位)、浮点数(32 和 64 位)、字符串、二进制、数组、映射和扩展类型。扩展类型允许应用程序定义自定义类型——时间戳扩展(类型 -1)是唯一标准化的扩展。几乎每种编程语言都有库,具有一致的跨语言兼容性。
MessagePack 用于 Redis(作为可选的序列化格式)、Fluentd(日志转发)、SignalR(实时 Web)以及许多带宽和解析速度重要的 RPC 系统和游戏网络协议。当需要 JSON 兼容性但文本序列化开销过高时,它是一个好选择。
MessagePack 最适合带宽或解析速度至关重要的场景:实时通信、高吞吐量 API、游戏网络、物联网设备和缓存层。当人类可读性重要时,对于配置文件或与期望基于文本格式的系统互操作时,JSON 仍然是更好的选择。
与 Protocol Buffers 相比,MessagePack 像 JSON 一样是无 Schema 的——数据是自描述的,可以无需预定义 Schema 即可序列化。Protocol Buffers 需要 .proto Schema 文件编译成语言特定代码,但产生更小的载荷并提供更强的类型安全。MessagePack 更适合无 Schema 的动态数据,而 Protobuf 在需要最大效率的明确定义的 API 契约中表现出色。
扩展类型允许应用程序定义超出内置集的自定义数据类型。每个扩展有一个类型码(-128 到 127)和任意二进制数据。时间戳扩展(类型 -1)是唯一标准化的扩展,表示纳秒精度的时间戳。应用程序可以为 UUID、BigDecimal 或领域特定对象等类型定义自己的扩展。