Как передать поток входных данных в сжатый файл, когда он читается в Java? - PullRequest
7 голосов
/ 26 сентября 2008

Я хочу выполнить программу, и когда она будет запущена, прочитайте ее вывод и передайте вывод в сжатый файл. Вывод программы может быть довольно большим, поэтому идея состоит в том, чтобы не хранить слишком много в памяти - просто отправить его в zip-файл, когда я его получу.

1 Ответ

8 голосов
/ 26 сентября 2008
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);
}

Другими словами:

  1. Вы создаете ZipOutputStream, давая ему файл, в который хотите записать.
  2. Вы создаете ZipEntry, который составляет файл в этом zip-файле. т.е. когда вы открываете myFile.zip и там есть 3 файла, каждый файл является ZipEntry.

  3. Вы помещаете этот zipEntry в свой ZipOutputStream

  4. Создайте байтовый буфер для чтения ваших данных.
  5. Чтение из вашего inputStream в ваш байтовый буфер и запоминание количества.
  6. Пока счетчик не равен -1, запишите этот байтовый буфер в zipStream.
  7. Прочитайте следующую строку.

Закрывайте свои потоки, когда закончите. Заверните его так, как считаете нужным.

...