压缩InputStream,返回InputStream(在内存中,没有文件)

时间:2013-07-29 15:29:11

标签: java zip

我正在尝试压缩InputStream并返回一个InputStream:

public InputStream compress (InputStream in){
  // Read "in" and write to ZipOutputStream
  // Convert ZipOutputStream into InputStream and return
}

我正在压缩一个文件(所以我可以使用GZIP),但将来会做更多的事情(所以我选择了ZIP)。在大多数地方:

我的问题是:

  1. 如果不存在此类方法,如何将ZipOutPutStream转换为InputStream?

  2. 创建ZipOutPutStream()时,没有默认构造函数。我应该创建一个新的ZipOutputStrem(new OutputStream())??

2 个答案:

答案 0 :(得分:9)

类似的东西:

private InputStream compress(InputStream in, String entryName) throws IOException {
        final int BUFFER = 2048;
        byte buffer[] = new byte[BUFFER];
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ZipOutputStream zos = new ZipOutputStream(out);
        zos.putNextEntry(new ZipEntry(entryName));
        int length;
        while ((length = in.read(buffer)) >= 0) {
            zos.write(buffer, 0, length);
        }
        zos.closeEntry();
        zos.close();
        return new ByteArrayInputStream(out.toByteArray());
}

答案 1 :(得分:2)

  1. 使用带有.toByteArray()
  2. 的ByteArrayOutputStream解决了它
  3. 同样,传递上述元素