首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个输入流被关闭了吗?

这个输入流被关闭了吗?
EN

Stack Overflow用户
提问于 2013-08-05 18:56:02
回答 1查看 389关注 0票数 0

在使用org.apache.commons.compress读取嵌入式归档文件时,我遇到了一些非常奇怪的错误,我怀疑是我的经验不足困扰着我。

在运行我的代码时,我会得到各种截断的zip文件错误(以及其他截断的文件错误)。我怀疑这是我对ArchiveInputStream的使用

代码语言:javascript
复制
private final void handleArchive(String fileName, ArchiveInputStream ais) {
   ArchiveEntry archiveEntry = null;

   try {
      while((archiveEntry = ais.getNextEntry()) != null) {

         byte[] buffer = new byte[1024];

         while(ais.read(buffer) != -1) {
            handleFile(fileName + "/" + archiveEntry.getName(), archiveEntry.getSize(), new ByteArrayInputStream(buffer));
   } catch(IOException ioe) {
      ioe.printStackTrace();
   }
}

当我这样做时,archiveEntry = ais.getNextEntry()是否有效地关闭了我的ais,是否有任何方法使用公用压缩来读取嵌入式归档文件的字节?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-05 19:12:25

您正在执行一些wierd 看上去是什么?当你阅读你的档案时,每一个档案条目,您正在递归地调用read方法,这将导致打开下一个归档,而您的父代码仍在处理之前的归档。

在处理压缩文件中的任何新存档条目之前,您应该完全遍历归档条目。有点像

代码语言:javascript
复制
ArArchiveEntry entry = (ArArchiveEntry) arInput.getNextEntry();
byte[] content = new byte[entry.getSize()];
LOOP UNTIL entry.getSize() HAS BEEN READ {
    arInput.read(content, offset, content.length - offset);
}

apache站点上的示例中所述

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18065623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档