“deflate”总是压缩整个块吗?

问题描述 投票:0回答:1

这是文档中的示例:

 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()
中获得了非零返回,并不意味着您的整个输入都被压缩了。

这是正确的吗?在文档中,我很难找到明确提到这一点的地方。

java compression gzip deflate
1个回答
0
投票

如果你没有给它足够的输出空间,它就不会完成。您需要继续调用

deflate()
并提供更多输出空间,直到
finished()
为 true。

请注意,如果您没有通过

finish()
告诉它您已经提供了所有输入,它永远不会报告它已完成。

© www.soinside.com 2019 - 2024. All rights reserved.