Если бы я определил:
message A {
required int32 first = 1;
optional int32 second = 2;
}
Размер пространства, когда set_second (0) затем serializeToArray () не совпадает с размером, когда set_second (14353355445) затем serializeToArray ()
Есть ли способы сделать их одинаковыми по размеру?
Другими словами, как я могу сделать так, чтобы необязательные поля, которым не присвоены значения, имели одинаковый размер пространства, точно так же, как им были назначены значения?
Моя рекомендация: не пытайтесь делать это с Protobuf. Protobuf не предназначен для того, чтобы давать вам фиксированные или предсказуемые размеры, поэтому, если вы этого хотите, то Protobuf не является подходящим инструментом для работы.
Конечно, вы можете использовать хаки, как с помощью fixed32
и пытаться убедиться, что ваши поля всегда имеют значения не по умолчанию, но тогда вы боретесь со своими инструментами. Что-то еще может измениться в будущем, что снова сделает размеры непредсказуемыми. Лучше выбрать инструмент, который соответствует вашим потребностям.
Это закодированы особым образом чтобы сохранить пропускную способность, следовательно, отличается общий размер. Если вы хотите / хотите, чтобы он всегда был одинакового размера, вы можете использовать fixed32
тип поля альтернативно.
Однако вы должны заметить, что если вы вообще не установите значение для необязательного поля, сериализованный размер снова будет отличаться.