有没有办法 gzip Java 中的字节缓冲区?

Is there a way to gzip a byte buffer in Java?

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

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

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

调用 libzip

从 Java11 开始,有

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

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