Java: ZipOutputStream для сжатия фрагментов данных в один zip-файл - PullRequest
0 голосов
/ 08 октября 2019

Продолжение вопроса: Java: как сжать байт [] с помощью ZipOutputStream без промежуточного файла

Я могу сжать данные без промежуточного файла (или файла памяти). Теперь мне нужно сжать фрагменты данных и добавить их в один файл.

Я использую один ZipOutputStream, как предложено в предыдущем вопросе.

String infile = "test.txt";
FileInputStream in = new FileInputStream(infile);

String outfile = "test.txt.zip";
FileOutputStream out = new FileOutputStream(outfile);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
ZipEntry entry = new ZipEntry("test_unzip.txt");
entry.setSize(2048);
zos.putNextEntry(entry);

int len = 0;
while (len > -1) {
      byte[] buf = new byte[10];
      len = in.read(buf);
      zos.write(buf);
      out.write(baos.toByteArray());
      baos.reset();
}

zos.closeEntry();
zos.finish();
zos.close();

in.close();
out.close();

Я пробовал разные размеры для buf, переупорядочивание zos.finish и zos.closeEntry, а также пробовал с baos.reset.

и без него. Я также пытался прочитатьвсе содержимое infile в один буфер, но все еще не работает.

Я ожидал действительный файл .zip, который будет распакован в test_unzip.txt. Однако, когда я пытаюсь unzip test.txt.zip в моей командной строке, я получаю следующую ошибку:

End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of test.txt.zip or
        test.txt.zip.zip, and cannot find test.txt.zip.ZIP, period.
...