我正在尝试使用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中遇到异常。有人知道为什么吗?另外,您能告诉我我的算法是否正确实现了吗?
答案 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
}