Поддерживает ли буферы протокола Google поддержку расчета размера до сериализации?
Приложение My (DSP) создает данные с постоянной скоростью. Скорость зависит от конфигурации, выбранной пользователем. Я хотел бы знать, сколько байтов генерируется в секунду. Структура данных содержит многократное (упакованное) поле с плавающей запятой. Длина поля постоянна, но может быть изменена пользователем.
Есть ли функция буферов протокола, которая будет вычислять размер сообщения перед сериализацией?
Ответы
Ответ 1
Невозможно заранее знать, потому что protobuf упаковывает структуры, которые он задает, в наименьшие возможные байты - например, он не будет использовать четыре байта для int x = 1;
- так что библиотеке придется пройти весь график до знать размер вывода.
Я думаю, вы могли бы это выяснить, выполнив операцию сериализации в потоке, совместимом с protobuf вашего собственного дизайна, который просто подсчитывает байты, которые он задает. Это может быть дорогостоящим, но не более дорогостоящим, чем библиотека для выполнения этой работы.
Ответ 2
Если вы создали объекты сообщения, вы можете вызывать ByteSize() в сообщении, которое возвращает количество байтов, которое будет обрабатывать сообщение о сериализации. Существует ссылка на документы С++ ByteSize.