用于压缩的Gzip返回与原始类似的大小

时间:2016-09-30 07:45:41

标签: java gzip

我编写的这段代码用于压缩输入流

public InputStream compress(InputStream inputStream) throws IOException {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    try {
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
        byte[] inBytes = IOUtils.toByteArray(inputStream);
        gzipOutputStream.write(inBytes);
        ByteArrayInputStream retStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
        gzipOutputStream.close();
        return retStream;
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

}

返回相似大小的流。他们的代码中有任何错误吗? 传递的输入流是通过测试的图像文件:

@Test
public void test() throws IOException {
    try {
        in = this.getClass().getResourceAsStream("/testimage.jpg");
    } catch (NullPointerException e) {
        logger.log(Level.SEVERE, "Exception reading file in test - ", e);
    }
    compress(in);
}

2 个答案:

答案 0 :(得分:1)

JPEG(.jpg)文件已经压缩。试图再次压缩它很可能会稍微扩大它。

答案 1 :(得分:1)

如果你压缩已经压缩的内容,它就不会那么小(可能更大)。无限压缩是不可能的。 JPEG已被压缩(松散)。如果您使用GZIP位图或简单的文本文件,您会注意到其中的差异。