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

public InputStream compress (InputStream in){
  // Read "in" and write to ZipOutputStream
  // Convert ZipOutputStream into InputStream and return
}
我正在压缩一个文件(所以我可以使用GZIP),但将来会做更多(所以我选择了ZIP)。在大多数地方:
  • Compress an InputStream with gzip
  • How can I convert ZipInputStream to InputStream?
    他们使用不存在的toBytesArray()或getBytes()(!)-ZipOutputStream

  • 我的问题是:
  • 如果此类方法不存在,如何将ZipOutPutStream转换为InputStream?
  • 创建ZipOutPutStream()时,没有默认的构造函数。我应该创建一个新的ZipOutputStrem(new OutputStream())吗?
  • 最佳答案

    像这样的东西:

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

    关于java - 压缩InputStream,返回InputStream(在内存中,没有文件),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17928045/

    10-13 04:47