Как лучше всего сериализовать данные в независимом от языка двоичном формате?

StackOverflow https://stackoverflow.com/questions/144435

Вопрос

Я изучаю механизм сериализации данных для передачи через сокет или общую память с помощью независимого от языка механизма.Я не хочу использовать XML, поскольку эти данные будут очень структурированными, а скорость кодирования/декодирования имеет жизненно важное значение.Очень важно иметь хороший C API со свободной лицензией, но в идеале должна быть поддержка множества других языков.я посмотрел буферы протокола Google и АСН.1.Я на правильном пути?Есть ли что-то лучше?Должен ли я просто реализовать свою собственную упакованную структуру, а не искать какой-то стандарт?

Это было полезно?

Решение

Учитывая ваши требования, я бы выбрал Google Protocol Buffers.Похоже, он идеально подходит для вашего приложения.

Другие советы

Вы могли бы рассмотреть XDR.Он имеет RFC.Я использовал его, и у меня никогда не было проблем с производительностью.Он использовался в ONC RPC и имеет инструмент под названием rpcgen.Также легко создать генератор самостоятельно, если вы просто хотите сериализовать данные (это то, что я сделал из соображений переносимости, заняло у меня полдня).Существует реализация C с открытым исходным кодом, но она уже может находиться в системной библиотеке, поэтому исходные тексты вам не понадобятся.

ASN.1 всегда казался мне немного причудливым, но в зависимости от ваших реальных потребностей он может быть более подходящим, поскольку у XDR есть некоторые ограничения.

Просто хотел добавить в эту смесь ASN.1.ASN.1 — это стандарт формата, но существуют библиотеки для большинства языков и интерфейс C через asn1c гораздо чище, чем Интерфейс C для буферов протокола.

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

Бережливость — это двоичный формат, созданный Facebook. Вот сравнение с буферами протокола Google.

Проверить Гессен

А также есть Двоичный XML но, похоже, оно еще не стабилизировалось.В статье, на которую я ссылаюсь, содержится множество ссылок, которые могут представлять интерес.

Другой вариант: СНАК/TLV который используется AOL в протоколе Oscar/AIM.

Также проверьте Мышцы.Хотя он делает довольно много, он сериализуется в двоичный формат.

Несколько вещей, которые вам нужно учитывать

1. Storage
2. Encoding Style (1 byte 2 byte)
3. TLV standards

ASN.1 Parser хорош для двоичных представлений, но самое приятное то, что ASN.1 — это хорошо зарекомендовавшая себя технология, которая широко используется как внутри ITU-T, так и за его пределами.Эта нотация поддерживается рядом поставщиков программного обеспечения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top