Выход Zip-файла при использовании ByteArrayOuputStream меньше, чем у FileOutputStream.
В Java Я создаю Zip-файл. Который открывается успешно, когда я использую FileOutputStream.
При переключении FileOutputStream на ByteArrayOutputStream я получаю немного меньший файл, около 221 байта. И этот файл не открывается, но имеет то же содержимое, что и другие, но пропускает 221 байт.
Лог c, который я использую для создания Zip-файла, одинаков в обоих случаях. Поэтому я поделюсь основными логиками c без создания zip (дайте мне знать, если вам это нужно).
ByteArrayOutputStream baos = new ByteArrayOutputStream();
zipOS = new ZipOutputStream(baos);
Затем я создаю Zip-файл, а затем ...
zipOS.flush();
baos.flush();
baos.writeTo(new FileOutputStream("TEST_AS_BYTESTREAM_1.zip"));
zipOS.close();
baos.close();
Я использую baos.writeTo (), чтобы обойти это, чтобы доказать, что проблема связана не с ответом HTTP, а с элементом ByteArrayOutputStream.
При использовании baos.writeTo(new FileOutputStream("TEST_AS_BYTESTREAM_1.zip"));
я получаю файл меньшего размера, который не не открываются как Zip.
Этот лог c находится в java контроллере, так что ссылка, нажатая на веб-страницу, будет загружать zip-файл, не касаясь файловых систем, за исключением пользователей.
Вот код, использующий FileOutputStream, который работает ...
FileOutputStream baos = new FileOutputStream("TEST_AS_FILE.zip");
zipOS = new ZipOutputStream(baos);
Помимо второго фрагмента кода не имеет значения, так как мне нужно будет отправить файл, созданный на веб-сервере. Но дело в том, что поток Fileoutput с теми же логами c и ByteArrayOutputStream имеет разницу.