3

Я пытаюсь реализовать это описание алгоритма из предыдущего вопроса я был здесь в StackOverflow:IndexOutOfBoundsException при чтении из ZipInputStream Java

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(); 
     } 

Однако , Я получаю исключение в потоке «main» java.lang.IndexOutOfBoundsException в инструкции else. Кто-нибудь знает, почему? Кроме того, не могли бы вы рассказать мне, правильно ли был реализован мой алгоритм?

ответ

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 
} 
+0

что я должен использовать вместо того, чтобы знать, если есть запись, которую нужно прочитать? – cybertextron

+0

См. Мой отредактированный ответ. –

+0

Размер: 0 Имя: gs_info/ Размер: 624 Имя: gs_info/adobeillustrator.des Исключение в потоке «главный» java.lang.IndexOutOfBoundsException так, когда дело доходит до чтения этого файла и его задачи на MD5, я получаю это – cybertextron

Смежные вопросы