Java Deflater 总是返回 0 问题

标签 java

所以我有一个输入流,我从中读取了一个较小的固定大小缓冲区,我试图在 Runnable 类中缩小该缓冲区。

randomClass implements Runnable {
    public void run() {
        ...
        byte[] output = new Byte[FIXED];
        Deflater deflater = new Deflater();
        deflater.setInput(uncompressed);
        deflater.setLevel(Deflater.DEFLATED);
        int length = deflater.deflate(output);
        ...
    } 
}

我遇到的问题是 length 总是返回 0,这意味着根据文档我需要更多输入?但是,我检查过未压缩的内容不为空。如何从输出中获取字节?

此外,我相信我应该仅在最后一个 block 调用 deflater.finish() 。这是正确的吗?

最佳答案

我认为 compresser.finish(); 应该在 deflater.setInput(uncompressed); 之后调用。然后继续下一步,应该没问题了。

documentation 中也提到了同样的情况如下:

 byte[] output = new byte[100];
 Deflater compresser = new Deflater();
 compresser.setInput(input);
 compresser.finish();  //<-- finished is called here
 int compressedDataLength = compresser.deflate(output);

此外,请在初始化时设置级别,例如

 Deflater compresser = new Deflater(Deflater.DEFLATED, false); //<-set the level
 byte[] output = new byte[100];
 compresser.setInput(input);
 compresser.finish();  //<-- finished is called here
 int compressedDataLength = compresser.deflate(output);

希望这有帮助。

关于Java Deflater 总是返回 0 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077306/

相关文章:

java - 处理 java 管道流中的异常

java - 当 UI 线程执行其业务时,如何向用户提供按下按钮后的反馈

java - Libgdx x 和 y 区别

java - 创建了 Java Web 应用程序/MySql 应用程序

java - 使用 Java 编辑 PDF 文件

java - 在 Netbeans 中设置 JLabel 文本不起作用

java - 在 Groovy (SoapUI) 中创建属性值列表时,列表会自动排序吗?

java - 除了这种方式之外,还有其他方法可以检查值是否在某个范围之间吗?

java - 难以在 Eclipse 中加载 FXML 文件

java - 正则表达式精确匹配 n 次出现的字母和 m 次出现的数字