java.util.zip.Deflater的javadoc中的示例代码过于乐观,并假设您有一个包含所有输入的字节数组,以及一个足够大的输出字节数组。 >:(
是否有一个示例调用needsInput()
批量添加输入,finished()
批量输出?我似乎无法找到一个,而且对于什么是正确的操作顺序,文档有点模糊。
示例:
ByteBuffer
是一个100MB的内存映射文件对于批量输入和输出,我有一个长度为1024的字节数组:
byte[] inbatch = new byte[1024];
byte[] outbatch = new byte[1024];
看起来这样的事情可能有用,但我不确定,我怀疑可能会有一些微妙的边缘情况...
Deflater deflater = ...;
byte[] inbatch = new byte[1024];
byte[] outbatch = new byte[1024];
boolean inputDone = false;
while (true)
{
if (!inputDone && deflater.needsInput())
{
int n = get_more_input(..., inbatch);
if (n == 0)
inputDone = true;
else
deflater.setInput(inbatch, 0, n);
}
if (deflater.finished()
{
if (inputDone)
break;
}
else
{
int n = deflater.deflate(outbatch);
handle_output(outbatch, n);
}
}