【问题标题】:Is there a way to gzip a byte buffer in Java?有没有办法在 Java 中压缩字节缓冲区?
【发布时间】:2018-10-09 06:43:49
【问题描述】:

我有相当大的DirectByteBuffer,我想从中生成一个压缩后的DirectByteBuffer,而不将其内容转移到堆中。

标准java.util.Deflater 没有帮助,因为它在byte[] 上运行,根据定义,byte[] 是堆上的。

有没有办法在 Java 中做到这一点?或者我必须直接通过JNI拨打libzip

【问题讨论】:

    标签: java jvm gzip nio bytebuffer


    【解决方案1】:

    从 Java 11 开始,有

    允许将输入和输出指定为字节缓冲区。当然,这是否真的允许直接堆外处理取决于实现,但快速查看 OpenJDK 发现它有一个用于缓冲区到缓冲区处理的native 方法。

    从技术上讲,它不是 GZip,除非您还编写该文件格式的工件,但我想,您主要对压缩而不是文件格式感兴趣。

    【讨论】:

    • 非常有趣,谢谢。可以问一下JDK以前的版本吗?我目前使用 JDK8,因为 Scala 在 JDK 9+ 上无法正常工作,因此现在无法迁移。那么 JDK 8 上唯一的解决方案是显式调用 libzip 吗?
    • 我不知道任何早期的解决方案。所以你必须直接调用 libzip 或者更新 JDK。我认为,知道在当前版本中会有一个简单的解决方案会阻止在与旧版本中的原生库接口上花费太多精力......
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2021-05-30
    • 2021-12-05
    相关资源
    最近更新 更多