Ich erstelle eine Zip-Datei mit ByteArrayOutputStream und ZipOutPutSteam Aber seine Einnahme viel Verzögerung für eine große Zip-Datei in der Nähe von etwa 200 MB zu erstellen. Gibt es einen effizienten Weg?Herunterladen Zip-Datei von ZipOutputStream mit JAX-RS-
URL u = new URL(url);
URLConnection uc = u.openConnection();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ZipOutputStream zipOut = new ZipOutputStream(out);
zipOut.putNextEntry(new ZipEntry("file.csv"));
zipOut.write(IOUtils.toByteArray(uc.getInputStream()));
uc.getInputStream().close();
zipOut.closeEntry();
zipOut.close();
ResponseBuilder response = Response.ok(out.toByteArray());
response.header("Content-Disposition", "attachment;
filename=\"LMPeriod.zip\"");
return response.build();
Sie können versuchen, mit der Komprimierungsstufe herumzuspielen. Sie können die Dateien vorkomprimieren. I.e. habe einen Job, der die Komprimierung im Hintergrund ausführt. Sie können die gezippten Dateien zwischenspeichern. Die Komprimierung selbst dauert immer noch etwa 2 Mikrosekunden für 1 kB Daten + Lesen von Daten aus dem Dateisystem. Mit Ihrer Lösung (Lesen der gesamten Datei in den Speicher und Komprimieren im Speicher) können Speicherprobleme auftreten, wenn mehr als eine gleichzeitige Download-Anforderung vorliegt. – andih