Как смоделировать массив примитивов Java int [] в сообщении protobuf - PullRequest
0 голосов
/ 01 декабря 2018

Я новичок в буферах протокола Google и пытаюсь смоделировать примитивный массив int[] в java с помощью сообщения protobuf. * ​​1002 *

В настоящее время я использую этот файл прото:

syntax = "proto3";
package protobuf;

message primitiveArrayMsg {
    repeated int32 data = 1;
}

Который компилируется в Java-класс со структурой данных List<Integer> вместо массива примитивов int.

/**
 * <code>repeated int32 data = 1;</code>
 */
java.util.List<java.lang.Integer> getDataList();

Мое приложение должно содержать миллионы значений типа int, и для экономии памяти я решил использовать int вместо Integer.Есть ли способ скомпилировать описание сообщения protobuf в классе Java с структурой данных int[]?

К сожалению, я ничего не нашел в Language Buffers Language Guide (proto3) .Аналогичный вопрос был также задан в Как добавить массив int в сообщение protobuf , которое я пробовал, но, очевидно, автор вопроса искал ArrayList<Integer>, и поэтому ответ мне не помог.

Если для этого нет поддержки, можете ли вы порекомендовать мне более эффективный способ памяти, чем бокс Integer и использование List<Integer>?

1 Ответ

0 голосов
/ 01 декабря 2018

Сообщения протокола буфера не предназначены для обработки больших сообщений .

Даже если целые числа эффективно упакованы по умолчанию при использовании proto3, большое количество Integerобъекты потребуются в оперативной памяти (если только фактически не используются несколько отдельных значений, и в этом случае объекты Integer могут быть повторно использованы).

Если вам действительно нужно использовать сообщения протокола буфера для этогодругим вариантом будет транскрибировать массивы int в формат байтового массива и из него при кодировании / декодировании.

...