如何解决为什么 ZipInputStream.getNextEntry() 返回 null?
我有一个 AES 加密的 zip 文件。解密后,我留下了一个包含 zip 内容的字节 []。但是当我尝试解压缩它时,使用 ByteArrayInputStream,ZipInputStream.getNextEntry() 立即返回 null。调试,我看到我的 byte[] 没有一个必需的本地文件头签名是
静态长 LOCSIG = 0x04034b50L; // "PK\003\004"
所以 ZipInputStream.getNextEntry() 返回 null。
但是,如果我将这些解密的字节写入文件,然后使用传递给 ZipInputStream() 的 FileInputStream(),一切都会按预期进行。下面是我目前的代码。任何人都可以建议一种无需先写入临时文件即可解压缩的方法吗?
byte[] data = AESUtil.decryptInputStream(...);
ByteArrayInputStream bis = new ByteArrayInputStream(data);
ZipInputStream stream = new ZipInputStream(bis);
ZipEntry entry;
while ((entry = stream.getNextEntry()) != null) {
...
}
解决方法
我得出的结论是 ZipInputStream 不够灵活。当我用 Apache Commons 的压缩类替换上面的代码时,一切正常。下面是使用该库和相同字节数组的工作实现:
class TimerManager: ObservableObject {
@Published var secondsElapsed = 0.0
@Published var isRunning = false
var timer = Timer()
func start() {
isRunning = true
timer = Timer.scheduledTimer(withTimeInterval: 0.01,repeats: true) { timer in
self.secondsElapsed += 0.01
}
}
func stop() {
timer.invalidate()
isRunning = false
}
func reset() {
secondsElapsed = 0
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。