【发布时间】:2018-11-30 23:13:35
【问题描述】:
我是 Google 协议缓冲区的新手,并试图通过 protobuf 消息在 java 中对原始 int[] 数组进行建模。
目前我正在使用这个 proto 文件:
syntax = "proto3";
package protobuf;
message primitiveArrayMsg {
repeated int32 data = 1;
}
它编译成带有List<Integer> 数据结构的java 类,而不是原始int 的数组。
/**
* <code>repeated int32 data = 1;</code>
*/
java.util.List<java.lang.Integer> getDataList();
我的应用程序必须保存数百万个 int 值,为了节省内存,我决定使用 int 而不是 Integer。
有没有办法在具有int[] 数据结构的java 类中编译protobuf 消息描述?
不幸的是,我在Protocol Buffers Language Guide (proto3) 中一无所获。在How to add a int array in protobuf message 中也提出了类似的问题,我尝试过,但显然问题作者正在寻找ArrayList<Integer>,因此答案对我没有帮助。
如果没有对此的支持,你能推荐我一个比装箱到Integer 和使用List<Integer> 更节省内存的方法吗?
【问题讨论】:
-
你确定它实际上是这样存储列表的吗?例如,
getData(int)将返回未装箱的值。如果它存储装箱值,将值拆箱以将其返回给您,那么您将不得不再次装箱,这将是低效的。getDataList()可能只是int[]的“装箱视图”,但必须返回List<Integer>,因为这是List所能提供的全部。
标签: java serialization protobuf-java protocol-buffers