本文目录导读:

MsgPack(MessagePack)相比于 JSON,其平均压缩率通常在 20% 到 30% 左右,具体取决于数据内容的结构。
以下是详细的对比和说明:
核心差异:数据大小
| 特性 | JSON | MsgPack | 说明 |
|---|---|---|---|
| 数字 | 文本字符串 (如 "123456") |
二进制原始字节 (如 0x0001E240) |
MsgPack 大胜,数字越大,JSON 的字符串越长。 |
| 字符串 | 文本 (带引号) | 二进制 (长度前缀 + 原始字节) | MsgPack 略小,它节省了文本引号 。 |
| 布尔值/空值 | true/false/null (4-5字节) |
单个字节 (0xC3/0xC2/0xC0) |
MsgPack 大胜,节省3-4字节。 |
| 数组/对象 | 和逗号 ,冒号 | 无需分隔符,仅用长度前缀 | MsgPack 小胜,对于深层嵌套的结构,省去的标点符号会累积。 |
实际压缩率估算
假设一个典型的 API 响应(包含字符串、数字、数组和布尔值的混合结构):
- JSON 大小: 100 KB
- MsgPack 大小: 通常在 70 KB ~ 80 KB 之间
节省的百分比:25% ~ 30%
极端情况对比
-
纯大数字数组 (
[12345678901234567890, ...])- JSON: 每个数字需要 20+ 个字符。
- MsgPack: 每个数字用 8 字节(64位整数)表示。
- MsgPack 可以小 60% - 80%。
-
纯短字符串数组 (
["yes", "no", "ok"])- JSON: 每个字符串需要 3-5 字节 (包括引号)。
- MsgPack: 每个字符串 2-4 字节 (长度前缀 + 字符)。
- MsgPack 小 20% - 40%。
-
纯空对象/数组 (
{"a": {}})- JSON: 8 字节 (
{"a":{}})。 - MsgPack: 4 字节 (固定映射类型)。
- MsgPack 小 50%。
- JSON: 8 字节 (
为什么不是“很小很多”?
- 主要负载是字符串: 如果数据中大部分是长文本字符串 (如文章内容、名称),MsgPack 与 JSON 的差异很小,因为字符串本身的内容(字节数)占主导地位,MsgPack 只节省了每个字符串的 定界符(2字节)和长度前缀的差异。
- 标点符号占比低: 对于大型 JSON 对象, 这些字符占整体大小的比例通常低于 5%,MsgPack 之所以能压缩,主要是因为它用1字节的类型标记代替了ASCII文本(如用
0xA4代替"str"),以及用二进制存储数字。
| 数据类型 | JSON (典型大小) | MsgPack (典型大小) | 节省比例 |
|---|---|---|---|
| 简单混合对象 | 100 B | 70 - 80 B | 20% - 30% |
| 大数字为主 | 1 KB | 2 - 0.4 KB | 60% - 80% |
| 长文本为主 | 100 KB | 95 - 98 KB | 2% - 5% |
| 极简结构 | 10 B | 5 - 7 B | 30% - 50% |
在典型的 Web API 或配置数据场景中,MsgPack 比 JSON 小约 30%,它最大的优势不在于大小(因为 gzip 压缩后两者几乎一样大),而在于解析速度(二进制格式无需扫描字符串,直接按偏移量读取)和处理大数字的精度。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播