从ZipInputStream Java读取时的IndexOutOfBoundsException

时间:2012-06-11 20:42:09

标签: java exception zip nullpointerexception indexoutofboundsexception

我正在尝试使用stackoverflow中的上一个问题实现此算法描述:

suppressing or not allowing the access time to be modified java

所以我实现了

byte[] digest = new byte[this.BUFFER];
        MessageDigest md5;

        try {
            md5 = MessageDigest.getInstance("MD5");

            while(entry.getNextEntry() != null){

                ZipEntry current = entry.getNextEntry();

                if(current.isDirectory()){
                    digest = this.encodeUTF8(current.getName());
                    md5.update(digest);
                }
                else{
                        entry.read(digest, 0, this.BUFFER);
                        md5.update(digest);
                }
            }
            digest = md5.digest();
            entry.close();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

但是,我在else语句中的线程“main”java.lang.IndexOutOfBoundsException中遇到异常。有人知道为什么吗?另外,您能告诉我我的算法是否正确实现了吗?

1 个答案:

答案 0 :(得分:4)

您要拨打getNextEntry()两次,而不是一次:

while (entry.getNextEntry() != null) { // goes to the next entry
    ZipEntry current = entry.getNextEntry(); // goes to the next entry

请改用:

ZipEntry current;
while ((current = entry.getNextEntry()) != null) {
    // use current   
}

for (ZipEntry current = entry.getNextEntry(); current != null; current = entry.getNextEntry()) {
    // use current
}