Java 将字节数组写入ZipArchiveOutputStream

Java 将字节数组写入ZipArchiveOutputStream,java,zip,apache-commons-compress,Java,Zip,Apache Commons Compress,我需要创建一个zip文件,并且受到以下条件的限制: 条目以字节[](或ByteArrayOutputStream)的形式出现,而不是以文件的形式出现 条目的文件名可以是非ascii/UTF-8 JDK1.6或更早版本 由于java.util.zip仅支持JDK1.7及以后版本的UTF-8文件名,因此最好使用commons compress ZipArchiveOutputStream。但是如何基于字节数组或ByteArrayOutputStream而不是文件创建ZipEntryArchive

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

  • 条目以字节[](或ByteArrayOutputStream)的形式出现,而不是以文件的形式出现
  • 条目的文件名可以是非ascii/UTF-8
  • JDK1.6或更早版本
由于java.util.zip仅支持JDK1.7及以后版本的UTF-8文件名,因此最好使用commons compress ZipArchiveOutputStream。但是如何基于字节数组或ByteArrayOutputStream而不是文件创建ZipEntryArchive呢


谢谢大家!

以下方法将字节[]作为输入,生成zip并将其内容作为另一个字节[]返回。一切都在记忆中完成。磁盘上没有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();       
   }

这能解决您的问题吗?

以下方法将字节[]作为输入,生成zip并将其内容作为另一个字节[]返回。一切都在记忆中完成。磁盘上没有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();       
   }
这能解决您的问题吗?

您所说的“非UTF-8”是什么意思?任何Unicode字符都可以使用UTF-8进行编码。@Jesper我指的是“非ascii”、UTF-8、非拉丁……您所说的“非UTF-8”是什么意思?任何Unicode字符都可以使用UTF-8进行编码。@Jesper我指的是“非ascii”、UTF-8、非拉丁。。。