我是Google协议缓冲区的新手,并试图通过protobuf消息在Java中为原始int[]
数组建模。
当前我正在使用此原始文件:
syntax = "proto3";
package protobuf;
message primitiveArrayMsg {
repeated int32 data = 1;
}
将其编译为具有List<Integer>
数据结构而不是原始int
数组的Java类。
/**
* <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>
的存储效率更高的方法吗?
答案 0 :(得分:0)
协议缓冲区消息为not designed to handle large messages。
即使使用proto3时默认情况下整数为efficiently packed,运行时内存中仍需要大量Integer对象(除非实际使用了很少的不同值,在这种情况下Integer对象可以重新使用)。
如果您确实需要为此使用协议缓冲区消息,那么另一种选择是在进行编码/解码时,将int数组与字节数组格式互写。