在Java中,有没有一种方法可以对字节缓冲区进行gzip压缩?

5
我有一个非常大的DirectByteBuffer,我希望能够生成一个经过gzip压缩的DirectByteBuffer,且不需要将其内容传输到堆上。
由于标准的java.util.Deflater仅操作在堆上(即byte[]),因此无法提供帮助。
在Java中是否有方法可以完成这个任务?或者我是否必须通过JNI直接调用libzip
1个回答

8
从Java 11开始,有以下方法:

可以使用字节缓冲区指定输入和输出。当然,这是否实际允许直接处理非堆外存储器是取决于其实现的,但快速查看OpenJDK揭示了它具有一个用于缓冲区到缓冲区处理的本地方法。
从技术上讲,这不是GZip,除非您也编写该文件格式的工件,但我想您主要关心的是压缩而不是文件格式。

非常有趣,谢谢。我可以问一下之前的JDK版本吗?我目前使用JDK8,因为Scala在JDK 9+上无法正常工作,所以现在无法迁移。那么,在JDK 8上唯一的解决方案是显式调用libzip吗? - Some Name
我不知道有任何早期的解决方案。因此,您必须直接调用libzip或更新JDK。我认为,知道当前版本中将有简单的解决方案会阻止在旧版本中花费过多精力与本地库进行接口交互... - Holger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接