我正在尝试使用 Kotlin 和 ZipInputStream 将压缩文件读入 ByteArrayOutputStream()
val f = File("/path/to/zip/myFile.zip")
val zis = ZipInputStream(FileInputStream(f))
//loop through all entries in the zipped file
var entry = zis.nextEntry
while(entry != null) {
val baos = ByteArrayOutputStream()
//read the entry into a ByteArrayOutputStream
zis.use{ it.copyTo(baos) }
val bytes = baos.toByteArray()
System.out.println(bytes[0])
zis.closeEntry() //error thrown here on first iteration
entry = zis.nextEntry
}
我得到的错误是:
java.io.IOException: Stream closed
at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:67)
at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:139)
<the code above>
我想可能zis.use在读取条目的内容后已经关闭了条目,所以我删除了zis.closeEntry(),但是在尝试获取下一个条目时它产生了相同的错误
我知道zis.use是安全的并保证输入流已关闭,但我希望它只关闭条目而不是整个流。
打印了整个字节数组后,我知道只有 zip 中的第一个文件正在被读取 zis.use
有没有一种好方法可以在 kotlin 中读取 ZipInputStream 中的所有条目?
桃花长相依
大话西游666
相关分类