gzip:java中的inflate float数组

时间:2016-05-10 19:03:47

标签: java gzip

我试图找出一种方法来膨胀/收缩java中的一系列浮点数。

我的deflate代码看起来像这样,似乎工作正常。

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

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

1 个答案:

答案 0 :(得分:1)

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

为什么不使用:

writeObject

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