Непонятное поле google protobuf - PullRequest
0 голосов
/ 13 ноября 2018

Я анализирую некоторые данные протобуфа, используя https://protogen.marcgravell.com/decode и не могу понять этого:

enter image description here

Я читаю руководство по кодированию protobuf и вижу, что данные должны быть не строкой, а чем-то ограниченным длиной string, bytes, embedded messages, packed repeated fields

Чего я не понимаю, так это того, почему в поле 105 есть очень хорошая строка apples1, а затем 3x случайных пустых полезных данных для того же поля 105? Это просто какая-то странность с использованием сторонних протубуфов, на которые я смотрю, или это что-то еще, чего мне не хватает?

Заранее спасибо.

1 Ответ

0 голосов
/ 13 ноября 2018

Нет ничего особенно необычного в пустых строках; однако также вполне возможно, что они являются вложенными сообщениями - просто объектами без каких-либо интересных свойств. Под-сообщение nil (не назначено / пусто / и т. Д.) Вообще не будет присутствовать, но дополнительное сообщение не-nil без какого-либо интересного содержимого будет: двоичная строка нулевого байта (в терминах protobuf).

Аналогично: поле bytes, которому явно назначен буфер нулевой длины: будет двоичной строкой с нулевым байтом. И: «упакованный» массив с нулевыми элементами: будет двоичной строкой с нулевым байтом.

Итак: ничего необычного здесь - это совершенно нормальный и ожидаемый протобуф для ряда сценариев.


Поскольку номер поля не меняется, он звучит как-то так:

 repeated string whatever = 105;

1020 * т.е. *

obj.Whatever = [ "apples1", "", "", "" ];

Странно, но не недействительно.

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