Поддерживают ли буферы протокола Google вычисление размера перед сериализацией? - PullRequest
13 голосов
/ 15 ноября 2010

My (DSP) приложение генерирует данные с постоянной скоростью. Скорость зависит от конфигурации, выбранной пользователем. Я хотел бы знать, сколько байтов генерируется в секунду. Структура данных содержит повторяющееся (упакованное) поле с плавающей запятой. Длина поля постоянна, но может быть изменена пользователем.

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

Ответы [ 2 ]

16 голосов
/ 22 ноября 2010

Если вы создали объекты сообщения, вы можете вызвать ByteSize () для сообщения, которое возвращает количество байтов, которое займет сообщение сериализации. Есть ссылка на документы C ++ ByteSize .

7 голосов
/ 15 ноября 2010

Невозможно знать заранее, потому что protobuf упаковывает структуры, которые ему даны, в наименьшее возможное число байтов - например, он не будет использовать четыре байта для int x = 1; - поэтому библиотеке придется пройти весь граф дознать размер вывода.

Я полагаю, что вы могли бы это выяснить, выполнив операцию сериализации для протобуф-совместимого потока вашей собственной конструкции, который просто считает байты, которые ему даны.Это может быть дорогостоящим, но не более дорогостоящим, чем это может быть сделано для библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...