Java Deflater始终返回0问题

Java Deflater始终返回0问题,java,Java,所以我有一个输入流,我从中读取一个较小的固定大小的缓冲区,我试图在一个可运行的类中释放它 randomClass implements Runnable { public void run() { ... byte[] output = new Byte[FIXED]; Deflater deflater = new Deflater(); deflater.setInput(uncompressed); d

所以我有一个输入流,我从中读取一个较小的固定大小的缓冲区,我试图在一个可运行的类中释放它

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,这意味着我需要根据文档进行更多输入?但是,我检查了未压缩的值是否为null。如何从输出中获取字节


我还认为我应该只在最后一个块调用deflater.finish()。这是正确的吗?

我想
compresser.finish()
应该在deflater.setInput(未压缩)之后调用。然后继续下一步,应该没问题

下文中也提到了这一点:

 byte[] output = new byte[100];
 Deflater compresser = new Deflater();
 compresser.setInput(input);
 compresser.finish();  //<-- finished is called here
 int compressedDataLength = compresser.deflate(output);
byte[]输出=新字节[100];
放气压缩机=新的放气器();
压缩机设置输入(输入);

压缩机表面处理()// 我认为
compresser.finish()
应该在deflater.setInput(未压缩)之后调用。然后继续下一步,应该没问题

下文中也提到了这一点:

 byte[] output = new byte[100];
 Deflater compresser = new Deflater();
 compresser.setInput(input);
 compresser.finish();  //<-- finished is called here
 int compressedDataLength = compresser.deflate(output);
byte[]输出=新字节[100];
放气压缩机=新的放气器();
压缩机设置输入(输入);

压缩机表面处理()// 您需要调用
compresser.finish()
以获得最终输出。请参阅Javadoc。如果您有多个缓冲区,最好使用
DeflaterInputStream

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

即使我压缩的块不是输入流中的最后一个块,也应该调用finish()。我认为您需要在调用
finish()
deflate(output)
之前添加所有输入。即使我调用finish,压缩数据长度在该压缩级别下仍然为0。@bph:您能分享您的
未压缩的
吗?我会验证并让你知道。未压缩的只是一个固定长度的字节数组。使用deflater.setLevel(deflater.DEFLATED)时,输出仅为0;其他级别似乎有一个长度。即使我正在压缩的块不是输入流中的最后一个块,是否仍应调用finish()。我认为您需要在调用
finish()
deflate(output)
之前添加所有输入。即使我调用finish,压缩数据长度在该压缩级别下仍然为0。@bph:您能分享您的
未压缩的
吗?我会验证并让你知道。未压缩的只是一个固定长度的字节数组。使用deflater.setLevel(deflater.DEFLATED)时,输出仅为0;其他级别似乎有一个长度。