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;其他级别似乎有一个长度。