1

所以我有一个输入流,我从中读取一个较小的固定大小缓冲区,我试图在 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);
        ...
    } 
}

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

此外,我相信我应该只在最后一个块调用 deflater.finish() 。它是否正确?

4

2 回答 2

1

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

以下文档中也提到了相同的内容:

 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);

希望这可以帮助。

于 2012-10-25T21:17:57.097 回答
0

您需要调用compresser.finish()以获取最终输出。请参阅 Javadoc。如果您有多个缓冲区,最好使用DeflaterInputStream.

于 2012-10-26T01:35:38.550 回答