如何正确关闭嵌套的zipinputstreams?

kadbb459  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(243)

我正在读取内存中的嵌套zip文件(包含多个其他zip文件的zip文件),代码如下

try (ZipInputStream zis = new ZipInputStream(inputStream)) {
   ZipEntry zipEntry;
   while ((zipEntry = zis.getNextEntry()) != null) {
      if (zipEntry.getName().endsWith(".zip")) {
         ZipInputStream nestedZis = new ZipInputStream(zis);
         Pojo myPojo = myPojoReader.readFrom(nestedZis);
      }
   }
   zis.closeEntry();
}

代码运行良好,但由于嵌套流的存在,我(在android中)出现了strictmode冲突错误 nestedZis 未正确关闭。
问题是:
我不能更早地示例化它,因为我必须调用 zis.getNextEntry() 之前,以正确定位外部流
我不能在while循环中关闭它,因为这也会关闭外部zipinputstream
是否有正确处理资源的解决方案?
注意,我并没有明确询问这里描述的链接流。由于上面提到的第一个问题,我无法在try with resources语句中包含嵌套流。
注:我不能使用 ZipFile 因为我只能获取一个inputstream作为我的初始资源,并且不能访问该文件。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题