我编写的这段代码用于压缩输入流
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);
}
答案 0 :(得分:1)
JPEG(.jpg)文件已经压缩。试图再次压缩它很可能会稍微扩大它。
答案 1 :(得分:1)
如果你压缩已经压缩的内容,它就不会那么小(可能更大)。无限压缩是不可能的。 JPEG已被压缩(松散)。如果您使用GZIP位图或简单的文本文件,您会注意到其中的差异。