java - gzip:在java中膨胀 float 组

标签 java gzip

我正在尝试找出一种在 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/

相关文章:

javascript - GZip 完整的 ASP.NET 网站

java - 在命令提示符中检查 java 版本时出错

Java 需要某些但不是所有行的 stepRender 行

java - spring boot war部署到tomcat给出404错误

ruby - 如何逐行读取 gzip 文件?

json - 在 firebase 上使用 gzip 压缩

java - 如何在 MainActivity 和 Fragment 中正确获取 WifiManager 的实例

java - 使用rest进行 Elasticsearch 查询

php - 使用 GZIP 下载文件

git - 压缩包含 `.git` 目录的 git 存储库目录