我得到了一个受密码保护的 zip 存档,
我需要编写一段代码,将存档解密为 abyte []
而无需将中间结果保存到文件系统,
到目前为止,我发现标准的 java JDK 不允许执行这样的操作,
还有一个库Zip4j
,但它似乎不允许直接解密文件,byte[]
而是将结果写入文件系统,
如果真的真的很感激任何帮助,
谢谢
你可以用 zip4j 做到这一点。这是文档中的一个示例:
import net.lingala.zip4j.io.inputstream.ZipInputStream;
import net.lingala.zip4j.model.LocalFileHeader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class ZipInputStreamExample {
public void extractWithZipInputStream(File zipFile, char[] password) throws IOException {
LocalFileHeader localFileHeader;
int readLen;
byte[] readBuffer = new byte[4096];
try (ZipInputStream zipInputStream = new ZipInputStream(fileInputStream, password)) {
while ((localFileHeader = zipInputStream.getNextEntry()) != null) {
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
while ((readLen = zipInputStream.read(readBuffer)) != -1) {
outputStream.write(readBuffer, 0, readLen);
}
}
}
}
}
}
然后,您可以outputStream.toByteArray()
在每个条目上执行以获取 zip 中该条目的字节内容。