Как передать inputstream в архивированный файл, когда он считывается с помощью Java?
-
02-07-2019 - |
Вопрос
Я хочу запустить программу и по мере ее запуска прочитать ее выходные данные и передать выходные данные в архивированный файл.Выходные данные программы могут быть довольно большими, поэтому идея состоит в том, чтобы не хранить слишком много в памяти - просто отправить их в zip-файл по мере их получения.
Решение
ZipOutputStream targetStream = new ZipOutputStream(fileToSaveTo);
ZipEntry entry = new ZipEntry(nameOfFileInZipFile);
targetStream.putNextEntry(entry);
byte[] dataBlock = new byte[1024];
int count = inputStream.read(dataBlock, 0, 1024);
while (count != -1) {
targetStream.write(dataBlock, 0, count);
count = inputStream.read(dataBlock, 0, 1024);
}
Другими словами:
- Вы создаете ZipOutputStream, предоставляя ему файл, в который вы хотите выполнить запись.
Вы создаете ZipEntry, который представляет собой файл внутри этого zip-файла.т. е.Когда вы открываете myFile.zip, и там есть 3 файла, каждый файл является ZipEntry.
Вы помещаете этот ZipEntry в свой ZipOutputStream
- Создайте байтовый буфер для считывания ваших данных.
- Считайте из вашего InputStream в ваш байтовый буфер и запомните количество.
- Пока значение count не равно -1, запишите этот байт byffer в ваш zipStream.
- Прочтите следующую строчку.
Закройте свои потоки, когда закончите.Оберните это в метод, который вы считаете нужным.
Не связан с StackOverflow