Я изучаю механизм сериализации данных, которые должны передаваться через сокет или разделяемую память в независимом от языка механизме. Я не хочу использовать 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!
Ответ 5
Thrift - это двоичный формат, созданный Facebook. Здесь сравнение с буферами протокола google.
Ответ 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, так и за ее пределами. Обозначения поддерживаются рядом поставщиков программного обеспечения.