这是文档中的示例:
byte[] output = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
compresser.end();
但是
DeflaterOutputStream
这样做:
if (!def.finished()) {
def.setInput(b, off, len);
while (!def.needsInput()) {
int len = def.deflate(buf, 0, buf.length);
if (len > 0) {
out.write(buf, 0, len);
}
}
}
这让我认为,仅仅因为您从调用
deflate()
中获得了非零返回,并不意味着您的整个输入都被压缩了。
这是正确的吗?在文档中,我很难找到明确提到这一点的地方。
如果你没有给它足够的输出空间,它就不会完成。您需要继续调用
deflate()
并提供更多输出空间,直到 finished()
为 true。
请注意,如果您没有通过
finish()
告诉它您已经提供了所有输入,它永远不会报告它已完成。