Как необязательным полям, которым не назначены значения в protocbuf, быть выделены пробелы

Если бы я определил:

message A {
required int32 first = 1;
optional int32 second = 2;
}

Размер пространства, когда set_second (0) затем serializeToArray () не совпадает с размером, когда set_second (14353355445) затем serializeToArray ()

Есть ли способы сделать их одинаковыми по размеру?

Другими словами, как я могу сделать так, чтобы необязательные поля, которым не присвоены значения, имели одинаковый размер пространства, точно так же, как им были назначены значения?

2

Решение

Моя рекомендация: не пытайтесь делать это с Protobuf. Protobuf не предназначен для того, чтобы давать вам фиксированные или предсказуемые размеры, поэтому, если вы этого хотите, то Protobuf не является подходящим инструментом для работы.

Конечно, вы можете использовать хаки, как с помощью fixed32 и пытаться убедиться, что ваши поля всегда имеют значения не по умолчанию, но тогда вы боретесь со своими инструментами. Что-то еще может измениться в будущем, что снова сделает размеры непредсказуемыми. Лучше выбрать инструмент, который соответствует вашим потребностям.

1

Другие решения

Это закодированы особым образом чтобы сохранить пропускную способность, следовательно, отличается общий размер. Если вы хотите / хотите, чтобы он всегда был одинакового размера, вы можете использовать fixed32 тип поля альтернативно.


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

0

По вопросам рекламы [email protected]