Как работает InputStream.read(byte[])?

Я пытаюсь разархивировать папку zip, у меня есть проблема, понять, как ZipInputStream.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())) - это выражение, значением которого является значение, присвоенное переменной.

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

Другие вопросы по тегам