2016-10-20 7 views
-1

Я пытаюсь распаковать ZIP-папку, у меня есть проблема, как работают ZipInputStream.read(byte[]). Этот код работает нормально, но я не знаю, больше ли мой файл, чем буфер, который я установил, как я буду работать.Как работает InputStream.read (byte [])?

byte[] buffer = new byte[1024]; 
zipIs = new ZipInputStream(new FileInputStream(FILE_PATH)); 
while ((entry = zipIs.getNextEntry()) != null) { 

     String entryName = File.separator + entry.getName(); 

     // Call file input stream 
     FileOutputStream fos = new FileOutputStream(entryName); 

     int len; 
     // Write current entry 
     while ((len = zipIs.read(buffer)) > 0) { 
      fos.write(buffer, 0, len); 
     } 
     fos.close(); 
     } 

Я прочитал документ, но я нахожу его смущенным, пожалуйста, помогите.

ответ

1

У меня проблема понять, как ZipInputStream.read(byte[]) работа.

Он описан в javadocs для InputStream.read(bytes[]):

Этот код прекрасно работать, но я не знаю, если мой файл больше, чем буфер я установить, как я буду работать.

Это то, для чего нужен цикл.

while ((len = zipIs.read(buffer)) > 0) { 
     fos.write(buffer, 0, len); 
    } 

Она считывает один буфер, в то время, устанавливая len количеству считанных байтов, пока вызов не read возвращает ноль (или меньше). Каждый буфер полон написан с использованием len сказать, сколько байт для записи, а затем повторяет ...

Синтаксис while ((a = call()) > 0) { просто использует тот факт, что назначение (например, (a = call())) является выражением, значение, которое является значение, присвоенное переменной.

Чтение потоков - одна из ситуаций, когда эта идиома обычно используется. Стоит вспомнить об этом.

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

  • Нет связанных вопросов^_^