我的DirectByteBuffer
很大,我想用它生成一个gzip压缩的DirectByteBuffer
,而无需将其内容传输到堆中。
标准java.util.Deflater
不能起作用,因为它在byte[]
上运行,而libzip
定义为堆。
在Java中有没有办法做到这一点?还是我必须直接通过JNI
致电Bike
?
答案 0 :(得分:6)
从Java 11开始,有
和
允许将输入和输出指定为字节缓冲区。当然,它的实现取决于是否实际上是否允许直接进行堆外处理,但是快速浏览OpenJDK可以发现,它具有native
方法用于缓冲区到缓冲区的处理。
从技术上讲,它不是GZip,除非您也正在编写该文件格式的工件,但我想,您主要是对压缩感兴趣,而不是文件格式。