我正在尝试找出一种在 java 中对 float 数组进行充气/放气的方法。
我的放气代码看起来像这样,看起来工作正常。
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 float )
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();
?这将与您编写的代码相匹配。如果需要,您可以将数组包装在列表中。
关于java - gzip:在java中膨胀 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37146898/