Кодек MessagePack
Кодирование и декодирование формата бинарной сериализации MessagePack
Вставьте данные MessagePack из ответов API, файлов журнала или сетевых перехватов
Нажмите для вставки примера данных
Результат декодирования
Введите данные MessagePack и нажмите Декодировать для просмотра результатов
Просмотр байтов
Введите корректные JSON данные для кодирования в MessagePack
Кодирование длины контейнера
- Compact: Использует минимум байтов (fixarray/fixmap при ≤15 элементах)
- Explicit 16-bit: Всегда использует 2-байтную длину (формат array16/map16)
- Explicit 32-bit: Всегда использует 4-байтную длину (формат array32/map32)
Нажмите для вставки примера JSON
Результат кодирования
Введите данные JSON и нажмите Кодировать для генерации MessagePack
Просмотр байтов
Статистика кодирования
Справочник типов данных MessagePack
| Имя типа | Диапазон байтов формата | Описание |
|---|---|---|
| Положительный FixInt | 0x00-0x7F | Целые числа от 0 до 127 (один байт) |
| Отрицательный FixInt | 0xE0-0xFF | Целые числа от -32 до -1 (один байт) |
| FixMap | 0x80-0x8F | Словари с 0-15 парами ключ-значение |
| FixArray | 0x90-0x9F | Массивы с 0-15 элементами |
| FixStr | 0xA0-0xBF | Строки длиной 0-31 байт |
| Nil | 0xC0 | Представляет значение null/nil |
| Булево | 0xC2-0xC3 | True (0xc3) или False (0xc2) |
| Бинарный | 0xC4-0xC6 | Сырые бинарные данные (bin8/bin16/bin32) |
| Расширение | 0xC7-0xC9, 0xD4-0xD8 | Типы, определённые приложением с кодом типа |
| Число с плавающей точкой | 0xCA-0xCB | 32-битные или 64-битные числа с плавающей точкой |
| Беззнаковое целое | 0xCC-0xCF | 8/16/32/64-битные беззнаковые целые |
| Знаковое целое | 0xD0-0xD3 | 8/16/32/64-битные знаковые целые |
| Строка | 0xD9-0xDB | UTF-8 строки (str8/str16/str32) |
| Массив | 0xDC-0xDD | Массивы с 16-битной или 32-битной длиной |
| Словарь | 0xDE-0xDF | Словари с 16-битной или 32-битной длиной |
Документация протокола MessagePack
Что такое MessagePack
MessagePack — это формат бинарной сериализации, предназначенный для эффективного обмена данными. Созданный Садаюки Фурухаши в 2008 году, он упаковывает JSON-подобные структуры данных в компактное бинарное представление, которое обычно на 50% меньше JSON и быстрее парсится. Формат широко используется в Redis, Fluentd и многих системах реального времени, где важна производительность.
Структура бинарного кодирования
MessagePack использует схему кодирования тип-длина-значение. Первый байт (байт формата) определяет тип данных и может содержать само значение для маленьких целых чисел и коротких строк. Большие значения используют дополнительные байты для длины и полезной нагрузки. Такая конструкция позволяет MessagePack чрезвычайно эффективно кодировать малые значения, поддерживая при этом большие структуры данных.
| Байт формата | Значение |
|---|---|
| 0x00-0x7F | Положительный fixint (0-127, значение в байте) |
| 0x80-0x8F | Fixmap (0-15 пар, счётчик в младших 4 битах) |
| 0x90-0x9F | Fixarray (0-15 элементов, счётчик в младших 4 битах) |
| 0xA0-0xBF | Fixstr (0-31 байт, длина в младших 5 битах) |
| 0xC0-0xDF | Типы Nil, boolean, bin, ext, float, int |
| 0xE0-0xFF | Отрицательный fixint (от -32 до -1) |
Сравнение MessagePack и JSON
Оба формата представляют одну и ту же модель данных, но оптимизированы для разных сценариев. MessagePack отдаёт приоритет компактному размеру и скорости парсинга, что идеально для высоконагруженных систем. JSON отдаёт приоритет читаемости человеком и универсальной совместимости на всех платформах.
- На 30-50% меньше JSON
- Нативная поддержка бинарных данных
- Более быстрая сериализация и парсинг
- Типобезопасность с различными целочисленными типами
- Читаем и редактируем человеком
- Универсальная поддержка браузерами и языками
- Упрощённая отладка и логирование
Типичные применения
- Сериализация данных Redis и кэширование
- Протоколы реального времени (игры, чаты)
- Агрегация и пересылка логов Fluentd
- RPC-фреймворки (MessagePack-RPC)
- Мобильные и встраиваемые приложения с ограничениями пропускной способности
Типы расширений
MessagePack поддерживает типы расширений, определяемые приложением. Каждое расширение имеет код типа (целое число от -128 до 127) и бинарную полезную нагрузку. Распространённые стандартные расширения включают временную метку (тип -1), которая хранит секунды и наносекунды для точного представления времени.
| Код типа | Типичное использование |
|---|---|
| -1 | Временная метка (официальная) |
| 0-127 | Типы, определяемые приложением |
Связанные инструменты
CBOR Кодек
Кодирование и декодирование бинарного формата CBOR с конвертацией JSON, hex-просмотром и семантическими тегами для IoT разработки
JSON Форматтер
Форматирование и валидация JSON данных для улучшения читаемости и отладки
Base64 Кодировщик/Декодер
Быстрое кодирование и декодирование Base64 строк с поддержкой текста и файлов
Protocol Buffers Инструмент
Онлайн-кодировщик/декодер Protocol Buffers. Парсинг .proto схем, кодирование JSON в бинарный формат или декодирование бинарного в JSON