gzip:在 java 中膨胀浮点数组

gzip: Inflate float array in java

我正在尝试找到一种方法来 inflate/deflate java 中的浮点数组。

我的放气代码如下所示,似乎工作正常。

List<Float> floats = ...;

ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzipOut = new GZIPOutputStream(baos);
ObjectOutputStream objectOut = new ObjectOutputStream(gzipOut);
objectOut.writeObject(floats.toArray(new Float[0]));

return baos.toByteArray();

我在将字节数组再次膨胀回 float[] 数组时遇到问题。

下面是我的一次尝试,但失败了(它甚至生成了 NaN 浮点数)

byte[] bytes =....
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
GZIPInputStream gzipIn = new GZIPInputStream(bais);
ObjectInputStream objectIn = new ObjectInputStream(gzipIn);
List<Float> floats = new ArrayList<>()

byte[] buffer = new byte[4]

while (gzipIn.read(buffer) >= 0) {
    Float f  = ByteBuffer.wrap(buffer).float
    floats.add(f)
}
return floats

我可以使用任何其他 类 - 我只是无法阻止,因为这将 运行 在非阻塞事件驱动的服务器中。

您正在使用不同的调用 - 您在写入部分调用 writeObject,然后假设您在读取部分一次只能读取 4 个字节。

为什么不直接使用:

Float[] floats = (Float[]) objectIn.readObject();

?那将匹配您的编写代码。然后,您可以根据需要将数组包装在列表中。