我是 Google Protocol buffers 的新手,正在尝试对原语进行建模 int[]
通过 protobuf 消息在 java 中数组。
目前我正在使用这个原型(prototype)文件:
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
。
有没有办法在 java 类中编译 protobuf 消息描述 int[]
数据结构?
不幸的是,我在Protocol Buffers Language Guide (proto3)中什么也没找到。 。 How to add a int array in protobuf message中也提出了类似的问题,我尝试过,但显然问题作者正在寻找 ArrayList<Integer>
因此答案对我没有帮助。
如果不支持这一点,你能给我推荐一种比装箱到 Integer
更有效的内存方式吗?并使用 List<Integer>
?
最佳答案
Protocol Buffer 消息为 not designed to handle large messages .
尽管整数是 efficiently packed默认情况下,使用 proto3 时,运行时内存中需要大量 Integer 对象(除非实际上使用过很少的不同值,在这种情况下,可以重新使用 Integer 对象)。
如果您确实必须为此使用 Protocol Buffer 消息,另一种选择是在编码/解码时将 int 数组转录为字节数组格式,或者从字节数组格式转录而来。
关于java - 如何在 protobuf 消息中对 Java 原始 int[] 数组进行建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53566164/