当使用java.util.zip.Deflater的deflate-method时,必须提供byte []作为参数,该byte []被初始化为多大?我已经读过,不能保证压缩数据甚至会比未压缩数据小.是否应该使用一定比例的输入?目前我的输入是它的两倍
打电话后deflate,打电话询问finished是否还有更多输出.例如:
byte[] buffer = new byte[BUFFER_SIZE];
while (!deflater.finished()) {
int n = deflater.deflate(buffer);
// deal with the n bytes in out here
}
Run Code Online (Sandbox Code Playgroud)
如果您只想收集内存中的所有字节,可以使用ByteArrayOutputStream.例如:
byte[] buffer = new byte[BUFFER_SIZE];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (!deflater.finished()) {
int n = deflater.deflate(buffer);
baos.write(buffer, 0, n);
}
return baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)
为什么Java将这个课程拼错为"deflater"?这个词是"平减指数".哎呀!对不起,不得不放弃我的胸膛.
如上所述,预期的用途是保持调用,deflate直到获得压缩的所有输出.但是,如果您真的想在一次调用中执行此操作,那么deflate可以扩展数据的数量就会受到限制.在zlib中有一个函数,遗憾的是Java不能调用deflateBound(),它提供了上限.您可以使用该函数的保守界限,并在此处复制相关行:
complen = sourceLen +
((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
Run Code Online (Sandbox Code Playgroud)