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

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

Ответы [ 10 ]

11 голосов
/ 28 сентября 2008

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

3 голосов
/ 29 сентября 2008

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

3 голосов
/ 28 сентября 2008

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

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

2 голосов
/ 28 сентября 2008

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

2 голосов
/ 28 сентября 2008

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

1 голос
/ 28 сентября 2008

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

1 голос
/ 28 сентября 2008

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

1 голос
/ 28 сентября 2008

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

1 голос
/ 28 сентября 2008

Выезд Гессиан

0 голосов
/ 10 сентября 2013

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

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

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

...