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();
?那将匹配您的编写代码。然后,您可以根据需要将数组包装在列表中。
我正在尝试找到一种方法来 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();
?那将匹配您的编写代码。然后,您可以根据需要将数组包装在列表中。