java.util.zip.Deflater的示例代码,它使用批处理模式进行输入和输出

时间:2014-08-12 18:44:08

标签: java zlib

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

0 个答案:

没有答案