我试图找出一种方法来膨胀/收缩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
我可以使用任何其他类 - 我只是无法阻止,因为这将在非阻塞事件驱动的服务器中运行。
答案 0 :(得分:1)
您正在使用不同的调用 - 您在写入部分调用ArrayList
,然后假设您在阅读部分中一次只能读取4个字节。
为什么不使用:
writeObject
?这符合您的编写代码。然后,您可以根据需要将数组包装在列表中。