Сохранение 4 значений int32 внутри каждого сообщения PB в виде 4 разных переменных «вместо использования repeated», чтобы избежать обратного анализа как «Список целых чисел»

#java #protocol-buffers

#java #буферы протокола

Вопрос:

Для моего использования буферов протокола мне нужно сериализовать 4 целых числа (не более) внутри каждого сообщения буфера протокола.) сообщение. Я хочу, чтобы при извлечении этих 4 целых чисел из сообщения я получал их как int , а не как Integer . (Причина этого в том, что мне нужны действительно быстрые вычисления и проверка равенства (с некоторым другим int) для этих извлеченных целых чисел)

Если я использую repeated тип в сообщении PB, то при синтаксическом анализе из байтов я получаю list of Integer . Таким образом, я планирую использовать 4 разные переменные(каждая int32 с optional тегом) внутри каждого сообщения PB вместо использования repeated . Таким образом, я ожидаю получить целые числа как int , а не как Integers

Хорошая ли это идея и поможет ли это мне?

Ответ №1:

Это, безусловно, позволит избежать проблемы со «списком». В regular .proto размер будет таким же, пока номера полей маленькие — единственной разницей в проводке будут разные номера полей вместо одного и того же числа 4 раза. Однако, если ваш список в настоящее время использует опцию «упакованный», он будет незначительно больше, чем 4 поля.

Лично я думаю, что, поскольку размер ограничен 4, подход с 4 полями более точно отражает ваш сценарий, поскольку в противном случае ничто не помешает вам добавить 20 значений. Я полностью за подход с 4 полями здесь.