【问题标题】:Write byte array to ZipArchiveOutputStream将字节数组写入 ZipArchiveOutputStream
【发布时间】:2013-09-07 08:07:38
【问题描述】:

我需要创建一个 zip 文件并且受到以下条件的限制:

  • 条目以 byte[](或 ByteArrayOutputStream)的形式出现,而不是 File。
  • 条目的文件名可以是非 ascii/UTF-8。
  • JDK 1.6 或更早版本

由于 java.util.zip 仅支持 JDK 1.7 及更高版本的 UTF-8 文件名,因此使用 commons-compress ZipArchiveOutputStream 似乎更好。但是如何创建基于字节数组或 ByteArrayOutputStream 而不是 File 的 ZipEntryArchive?

谢谢!

【问题讨论】:

  • “非 UTF-8”是什么意思 - 任何 Unicode 字符都可以使用 UTF-8 进行编码。
  • @Jesper 我的意思是“非 ascii”、UTF-8、非拉丁文......

标签: java zip apache-commons-compress


【解决方案1】:

以下方法将 byte[] 作为输入,生成 zip 并将其内容作为另一个 byte[] 返回。一切都在记忆中完成。磁盘上没有 IO 操作。我剥离了异常处理以获得更好的概览。

    byte[] zip(byte[] data, String filename) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ZipArchiveOutputStream zos = new ZipArchiveOutputStream(bos);

        ZipArchiveEntry entry = new ZipArchiveEntry(filename);
        entry.setSize(data.length);
        zos.putArchiveEntry(entry);
        zos.write(data);
        zos.closeArchiveEntry();

        zos.close();
        bos.close();

        return bos.toByteArray();       
   }

这能解决您的问题吗?

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2012-07-17
    • 2015-07-05
    • 1970-01-01
    • 2015-07-09
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多