2010-11-15 11 views
13

Mi aplicación (DSP) produce datos a una velocidad constante. La velocidad depende de la configuración que el usuario seleccione. Me gustaría saber cuántos bytes se generan por segundo. La estructura de datos contiene un campo de punto flotante repetido (empaquetado). La longitud del campo es constante, pero el usuario puede modificarla.¿El búfer de protocolo de Google admite el cálculo del tamaño antes de la serialización?

¿Hay una función de búferes de protocolo que calculará el tamaño del mensaje antes de la serialización?

Respuesta

7

Es imposible saberlo con anticipación, porque protobuf empaqueta las estructuras que se le dan en el menor número posible de bytes; por ejemplo, no usará cuatro bytes para int x = 1;, por lo que la biblioteca tendría que recorrer todo el gráfico para saber el tamaño de salida.

Creo que se puede encontrar esto haciendo una operación de serialización a una secuencia compatible con protobuf de su propio diseño que solo cuenta los bytes que se le da. Eso podría ser costoso, pero no más costoso de lo que sería para la biblioteca hacer ese trabajo.

+0

¿Cómo podemos forzarlo a usar 4 bytes para int y no empaquetarlo, para tener datos serializados de tamaño fijo? –

+0

Si serializa los datos usted mismo utilizando las clases ProtoBuf OutputStream, puede hacerlo utilizando los métodos de escritura para cada tipo base en lugar de la codificación varint; consulte https://developers.google.com/protocol-buffers/docs/encoding –

15

Si ha compilado los objetos de mensaje, puede llamar a ByteSize() en el mensaje que devuelve el número de bytes que tomaría el mensaje de serialización. Hay un enlace a los documentos C++ de ByteSize.

+0

Is hay alguna ByteSize() - como api para python? Vi [esto] (https://developers.google.com/protocol-buffers/docs/reference/python/) y no encontré nada –

Cuestiones relacionadas