将受保护的存档解压缩到字节数组
Unzip protected archive to a byte array
我得到了一个受密码保护的 zip 存档,
而且我需要编写一段代码来将存档解密为 byte []
而无需将中间结果保存到文件系统,
到目前为止我发现标准 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 中该条目的字节内容。
我得到了一个受密码保护的 zip 存档,
而且我需要编写一段代码来将存档解密为 byte []
而无需将中间结果保存到文件系统,
到目前为止我发现标准 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 中该条目的字节内容。