Совместимость формата данных между версиями protobuf - PullRequest
5 голосов
/ 07 июля 2011

Мне было интересно, останется ли постоянный формат сериализованных данных буфера протокола в версиях компилятора protobuf и клиентской библиотеки.

Другими словами, нужно ли использовать одну и ту же версию компилятора для генерации Python, Java и C ++?классы?И все ли эти клиенты должны использовать одну и ту же версию библиотек protobuf?

Этот пост как бы посвящен моему вопросу, но принятый ответ относится только к версии протобуфа OP.

1 Ответ

3 голосов
/ 07 июля 2011

Да, это в значительной степени идея. Не должно иметь значения, какую библиотеку вы используете, если она соответствует спецификации. Обратите внимание, что одни и те же данные могут представляться немного по-разному, например, порядок полей не должен иметь значения для клиента, и хотя обычно для клиентов - это запись полей в порядке возрастания, от клиентов явно требуется обрабатывать поля в любом порядке. Все, что я здесь говорю, это то, что это не может быть точно такими же байтами в том же порядке , но это должно нормально работать с любого клиента.

Обратите внимание, что некоторые реализации могут предлагать дополнительные функции (* кашель *, как мой предлагает поддержку наследования), предназначенные для использования в основном только в рамках этого одного клиента. В этом случае я бы: ожидал, что эти функции будут очевидны при использовании, и b: он должен всегда по-прежнему генерировать действительный поток protobuf (вы можете просто проигнорировать эти поля или поддержать их как bytes для поездки в оба конца).

...