Я новичок в буферах протокола Google и пытаюсь смоделировать примитивный массив int[]
в java с помощью сообщения protobuf.
В настоящее время я использую этот прото-файл:
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[]
?
К сожалению, я ничего не нашел в Руководстве по языку протокольных буферов (proto3). Аналогичный вопрос также задавался в Как добавить массив int в protobuf сообщение, которое я пробовал, но, очевидно, автор вопроса искал ArrayList<Integer>
, и поэтому ответ мне не помог.
Если для этого нет поддержки, можете ли вы порекомендовать мне более эффективный с точки зрения памяти способ, чем упаковка в Integer
и использование List<Integer>
?
getData(int)
вернет вам значение без упаковки. Было бы неэффективно, если бы он сохранял упакованное значение, распаковывая значение, чтобы вернуть его вам, только для того, чтобы вам пришлось снова упаковывать его. Возможно, чтоgetDataList()
- это просто бокс дляint[]
, но он должен вернуть вамList<Integer>
, потому что это все, что может предоставитьList
. - person Andy Turner   schedule 01.12.2018