CoderTools

Кодек MessagePack

Кодирование и декодирование формата бинарной сериализации MessagePack

🔒 100% Локальная обработкаВведенные вами данные обрабатываются полностью в браузере и не отправляются на сервер.

Вставьте данные MessagePack из ответов API, файлов журнала или сетевых перехватов

Нажмите для вставки примера данных

Результат декодирования

Введите данные MessagePack и нажмите Декодировать для просмотра результатов

Справочник типов данных MessagePack

Имя типа Диапазон байтов формата Описание
Положительный FixInt0x00-0x7FЦелые числа от 0 до 127 (один байт)
Отрицательный FixInt0xE0-0xFFЦелые числа от -32 до -1 (один байт)
FixMap0x80-0x8FСловари с 0-15 парами ключ-значение
FixArray0x90-0x9FМассивы с 0-15 элементами
FixStr0xA0-0xBFСтроки длиной 0-31 байт
Nil0xC0Представляет значение 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-0xDDМассивы с 16-битной или 32-битной длиной
Словарь0xDE-0xDFСловари с 16-битной или 32-битной длиной

Документация протокола MessagePack

Что такое MessagePack

MessagePack — это формат бинарной сериализации, предназначенный для эффективного обмена данными. Созданный Садаюки Фурухаши в 2008 году, он упаковывает JSON-подобные структуры данных в компактное бинарное представление, которое обычно на 50% меньше JSON и быстрее парсится. Формат широко используется в Redis, Fluentd и многих системах реального времени, где важна производительность.

Структура бинарного кодирования

MessagePack использует схему кодирования тип-длина-значение. Первый байт (байт формата) определяет тип данных и может содержать само значение для маленьких целых чисел и коротких строк. Большие значения используют дополнительные байты для длины и полезной нагрузки. Такая конструкция позволяет MessagePack чрезвычайно эффективно кодировать малые значения, поддерживая при этом большие структуры данных.

Байт формата Значение
0x00-0x7FПоложительный fixint (0-127, значение в байте)
0x80-0x8FFixmap (0-15 пар, счётчик в младших 4 битах)
0x90-0x9FFixarray (0-15 элементов, счётчик в младших 4 битах)
0xA0-0xBFFixstr (0-31 байт, длина в младших 5 битах)
0xC0-0xDFТипы Nil, boolean, bin, ext, float, int
0xE0-0xFFОтрицательный fixint (от -32 до -1)

Сравнение MessagePack и JSON

Оба формата представляют одну и ту же модель данных, но оптимизированы для разных сценариев. MessagePack отдаёт приоритет компактному размеру и скорости парсинга, что идеально для высоконагруженных систем. JSON отдаёт приоритет читаемости человеком и универсальной совместимости на всех платформах.

Преимущества MessagePack
  • На 30-50% меньше JSON
  • Нативная поддержка бинарных данных
  • Более быстрая сериализация и парсинг
  • Типобезопасность с различными целочисленными типами
Преимущества JSON
  • Читаем и редактируем человеком
  • Универсальная поддержка браузерами и языками
  • Упрощённая отладка и логирование

Типичные применения

  • Сериализация данных Redis и кэширование
  • Протоколы реального времени (игры, чаты)
  • Агрегация и пересылка логов Fluentd
  • RPC-фреймворки (MessagePack-RPC)
  • Мобильные и встраиваемые приложения с ограничениями пропускной способности

Типы расширений

MessagePack поддерживает типы расширений, определяемые приложением. Каждое расширение имеет код типа (целое число от -128 до 127) и бинарную полезную нагрузку. Распространённые стандартные расширения включают временную метку (тип -1), которая хранит секунды и наносекунды для точного представления времени.

Код типа Типичное использование
-1Временная метка (официальная)
0-127Типы, определяемые приложением

Быстрое меню

Нет недавних инструментов