В зависимости от различных факторов, вы можете посмотреть ASN.1 и невыровненные правила упакованного кодирования (uPER). Это двоичная сериализация, которая широко используется в телефонии, чтобы легко минимизировать количество передаваемых битов. Инструменты доступны для C, C ++, C#, Java, Python (я думаю, что они охватывают UPER). Хорошая отправная точка - Полезные старые технологии .
Одна из причин, по которой вы можете использовать его, заключается в том, что UPER, вероятно, в конечном итоге добивается большего успеха, чем все остальное. Другие преимущества - это ограничения (по значениям и размерам массивов). Вы можете express указать их в своей схеме, и сгенерированный код проверит данные по ним Это то, что может иметь реальное значение для проекта - автоматическая c очистка входящих данных - отличный способ противостоять атакам - и это то, чего не делает GPB.
Причины не использовать его являются то, что самые лучшие инструменты являются коммерческими и довольно дорогими. Хотя есть некоторые инструменты с открытым исходным кодом, которые довольно хороши, но не обязательно реализуют весь стандарт ASN.1 (который является обширным). Это также кривая обучения, хотя (на базовом уровне c) не так сильно отличается от буферов протокола Google. Фактически, на конференции, где Google анонсировал GPB, кто-то спросил: «Почему бы не использовать ASN.1?». Бод Google не слышал об этом; несколько иронично c, поисковая компания, которая не ищет в Интернете технологии двоичной сериализации, пошла дальше и изобрела свою собственную ...