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