Cómo agregar una matriz int en un mensaje protobuf

1 minuto de lectura

Avatar de usuario de javaMan
JavaMan

Tengo que redactar un mensaje protobuf que debe tener 1 variable entera y una matriz entera.

package protobuf;

message myProto {

optional uint32 message_id =1;
optional int update = 2;
//here I have to add a array of integers
//can I write like     optional int[] array =3;
//or should I use      optional repeated array;
//where array is another message with int variable

}

¿Es correcto mi enfoque?

La matriz se asigna a través de “repetido”:

 repeated int32 data = 4;

Tenga en cuenta que es posible que desee sint32/uint32. También tenga en cuenta que en los tres casos se pueden usar “matrices empaquetadas”, que son más eficientes;

repeated int32 data = 4 [packed=true];

  • ¿El concepto de matriz empaquetada también es aplicable para matrices dobles?

    – javaMan

    13 de septiembre de 2011 a las 21:05

  • ¿Puedo escribir datos dobles repetidos opcionales = 4? [packed = true];

    – javaMan

    13 de septiembre de 2011 a las 21:05

  • etiqueta @Raj; el tamaño de los datos se determina únicamente en tiempo de ejecución por la cantidad de datos que hay; no hay matrices de tamaño fijo en protobuf. En el caso de “empaquetado”, el tamaño (en bytes) se antepone a los datos.

    – Marc Gravell

    25 de enero de 2017 a las 11:16

  • Actualizar: desarrolladores.google.com/protocol-buffers/docs/proto3 dice “En proto3, los campos repetidos de tipos numéricos escalares usan codificación empaquetada de forma predeterminada”.

    – Jason Doucette

    31 de julio de 2017 a las 17:52

  • @Jason muy cierto (escribí una respuesta diferente, luego me di cuenta de que la pregunta era puramente sobre el esquema .proto, no sobre lo que estaba hablando)

    – Marc Gravell

    31 de julio de 2017 a las 17:59

¿Ha sido útil esta solución?