Как вы читаете сжатый поток ввода без записи в файл? - PullRequest
1 голос
/ 09 апреля 2020

Я пишу модульный тест, который тестирует функциональность, которая создает три файла, сжатых вместе, и возвращает InputStream (в частности, ByteArrayInputStream). Я просто хочу взять каждый файл по отдельности, распаковать его, а затем сделать некоторые утверждения о содержимом. Все, что я нахожу в Интернете, - это запись в файл, так как бы я сделал это полностью в памяти?

Вот что я получил:


      val zipIn = new ZipInputStream(zippedStream)

      Stream.continually(zipIn.getNextEntry)
          .takeWhile(_ != null)
          .foreach { entry =>
            val fout = new FileOutputStream(entry.getName)
            val buffer = new Array[Byte](1024)
            Stream.continually(zipIn.read(buffer))
              .takeWhile(_ != -1)
              .foreach(fout.write(buffer, 0, _))
          }

1 Ответ

4 голосов
/ 09 апреля 2020

Вместо FileOutputStream используйте ByteArrayOutputStream . Этот класс накапливает данные, записанные в массив байтов, который изменяется по мере необходимости. Вы можете получить копию накопленных байтов с помощью метода toByteArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...