在Java中:如何从byte[]数组压缩文件?

2022-08-31 16:00:01

我的应用程序正在通过 SMTP 服务器接收电子邮件。电子邮件中有一个或多个附件,电子邮件附件以byte[]的形式返回(使用sun javamail api)。

我正在尝试动态压缩附件文件,而无需先将它们写入磁盘。

实现这一结果的可能方法是什么?


答案 1

您可以使用Java的java.util.zip.ZipOutputStream在内存中创建一个zip文件。例如:

public static byte[] zipBytes(String filename, byte[] input) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    ZipEntry entry = new ZipEntry(filename);
    entry.setSize(input.length);
    zos.putNextEntry(entry);
    zos.write(input);
    zos.closeEntry();
    zos.close();
    return baos.toByteArray();
}

答案 2

我有同样的问题,但我需要在zip中有很多文件。

 protected byte[] listBytesToZip(Map<String, byte[]> mapReporte) throws IOException {
    String extension = ".pdf";
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    for (Entry<String, byte[]> reporte : mapReporte.entrySet()) {
        ZipEntry entry = new ZipEntry(reporte.getKey() + extension);
        entry.setSize(reporte.getValue().length);
        zos.putNextEntry(entry);
        zos.write(reporte.getValue());
    }
    zos.closeEntry();
    zos.close();
    return baos.toByteArray();
}

推荐