3

我正在尝试从我在stackoverflow中遇到的上一个问题中实现这个算法描述:

禁止或不允许修改访问时间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 中遇到异常。有人知道为什么吗?另外,您能否告诉我我的算法是否正确实施?

4

1 回答 1

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
}
于 2012-06-11T20:53:58.250 回答