Java 中的协议缓冲区:我们可以有效地处理原始数组吗?

Protocol Buffers in Java: can we handle primitive arrays efficiently?

我处理的消息包含一些属性和一千个浮点值数组 (double[])。当使用协议缓冲区序列化消息时,由于 "packed=true" 指令,双精度值被对齐并紧凑地存储在消息中。

但默认情况下,为该消息生成的 Java 类 将双精度数组表示为数组列表 (!),将原始双精度值装箱到对象中,将这些对象分散在内存中,而在最后我需要 double[] 表示来进一步聚合...

是否有生成 类 的选项,将重复的原始值处理为 Java 原始数组?

如前所述here 需要的是存储未装箱值的 ArrayList 版本。由于 java 泛型仅适用于对象(盒装类型),因此每个基本类型都需要一个实现。所以你可以使用 Apache Commons Primitives 提供的那个。

在几个地方讨论这个话题后,答案很明确没有

使用协议缓冲区,数字向量的二进制表示是高效的。但是目前 Java 实现无法有效地反序列化这些向量(而不是原始数组,你得到的是盒装数字的集合......)