Java 将字节数组写入ZipArchiveOutputStream
我需要创建一个zip文件,并且受到以下条件的限制: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
- 条目以字节[](或ByteArrayOutputStream)的形式出现,而不是以文件的形式出现
- 条目的文件名可以是非ascii/UTF-8
- JDK1.6或更早版本
谢谢大家! 以下方法将字节[]作为输入,生成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、非拉丁。。。