Каков наилучший способ сериализации данных в не зависящем от языка двоичном формате?

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

Ответ 1

Учитывая ваши требования, я бы пошел с буферами протокола Google. Похоже, он идеально подходит для вашего приложения.

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 6

Отъезд Hessian

Ответ 7

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

Ответ 8

Другим вариантом является SNAC/TLV, который используется AOL в протоколе Oscar/AIM.

Ответ 9

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

Ответ 10

Мало того, что вам нужно рассмотреть

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

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