GZIP解压缩如何在块中工作?

时间:2016-06-26 09:23:47

标签: java compression gzip

我正在使用GZIP压缩来压缩文件。考虑用于解压缩的代码片段

public static void decompress(File compressed, File raw)
    throws IOException
{
    InputStream in =
        new GZIPInputStream(new FileInputStream(compressed));
    OutputStream out = new FileOutputStream(raw);
    byte[] buffer = new byte[1000];
    int len;
    while((len = in.read(buffer)) > 0) {
        out.write(buffer, 0, len);
    }
    in.close();
    out.close();
}

请告诉我以下内容

  1. 这会以块的形式解压缩文件(即;解压缩仅在缓冲区中读取的文件内容)
  2. 这是否与解压缩整个文件相同(即;通过提供非常大的缓冲区大小)。如果是这样的话?
  3. GZIP算法在一次转弯时压缩/解压缩多少字节?这是按字节读取还是GZIP读取缓冲区中的整个内容以进行压缩/解压缩?
  4. 以块为单位压缩的文件与整个文件之间的压缩率?

1 个答案:

答案 0 :(得分:0)

  1. 是的,它会以块的形式解压缩。
  2. 是的,结果与将其解压缩为一个块相同。 (尽管你的代码永远不会那么做,无论buffer有多大。)
  3. 解压缩程序本身将使用给定的字节数,并尽可能从这些字节中解压缩。
  4. 您的代码无法压缩。如果是这样,答案是压缩结果不受分块的影响,除非插入了刷新操作。