为什么zipInputStream是空的虽然条目存在?

时间:2017-10-05 04:15:08

标签: java zipinputstream

我正在尝试解压缩档案, zis.getNextEntry()给了我nextEntry,我可以看到条目的正确名称,但是zip输入流本身是空的。为什么呢?

byte[] htmlFile = new byte[]{};           
        ByteArrayInputStream bais =  new ByteArrayInputStream(Base64.decodeBase64(template.getKey().getFileBase64()));
        zis = new ZipInputStream(bais);
        ZipEntry ze = null;
        try {
             while ((ze = zis.getNextEntry()) != null) {
                if (!ze.isDirectory()) {
                    byte[] tempEntry = new byte[]{};
                    try {
                        zis.read(tempEntry);
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }                        
                }
            }
            try {
                zis.closeEntry();
                zis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

下面是一些调试信息,你可以看到 - 条目存在,但没有从流中读取:

enter image description here

1 个答案:

答案 0 :(得分:2)

根据JavaDoc

public int read(byte[] b)
         throws IOException
  

将此输入流中的byte.length个字节数据读入   字节数组。此方法将阻止,直到某些输入可用

     
    

此方法只执行调用read(b,0,b.length)并返回     结果。

  

由于tempEntry的长度为0,因此无法从流中读取任何内容