作者:残血死少爷y_905 | 来源:互联网 | 2022-12-02 18:02
我有相当大的DirectByteBuffer
,我想DirectByteBuffer
从它生成一个gzip 而不将其内容传输到堆.
标准java.util.Deflater
没有用,因为它按照byte[]
定义在堆上运行.
有没有办法在Java中这样做?或者我必须libzip
直接打电话JNI
?
1> Holger..:
从Java 11开始,有
Deflater.setInput(ByteBuffer input)
和
Deflater.deflate(ByteBuffer output)
RESP.
Deflater.deflate(java.nio.ByteBuffer output, int flush)
允许将输入和输出指定为字节缓冲区.当然,它的实现依赖于它是否实际上允许直接的堆外处理,但是快速浏览OpenJDK后发现它有一个native
缓冲区到缓冲区处理的方法.
从技术上讲,它不是GZip,除非你也在编写那种文件格式的工件,但我想,你主要是对压缩而不是文件格式感兴趣.