Java中的协议缓冲区:我们能有效地处理基本数组吗?

Java中的协议缓冲区:我们能有效地处理基本数组吗?,java,protocol-buffers,Java,Protocol Buffers,我处理的消息包含一些属性和一千个浮点值(double[])的数组。当消息通过协议缓冲区序列化时,由于“packed=true”指令,双值将对齐并紧凑地存储在消息中 但是默认情况下,为该消息生成的Java类将double数组表示为数组列表(!),将原始double值装箱到对象中,将这些对象分散在内存中,而最后我需要double[]表示来进行进一步的聚合 是否有一个选项可以生成将重复的基元值作为Java基元数组处理的类?如前所述,需要的是存储未绑定值的ArrayList版本。由于java泛型仅适用于

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

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


是否有一个选项可以生成将重复的基元值作为Java基元数组处理的类?

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

在几个地方讨论了这个主题后,答案是明确的

使用协议缓冲区,数字向量的二进制表示是有效的。但Java实现目前不可能有效地反序列化这些向量(而不是原始数组,您可以获得装箱数字的集合…)