Как оптимизировать ZipOutputStream, чтобы использовать меньше оперативной памяти
Я использую этот код для загрузки почтового файла, содержащего отчеты о яшме. Как я могу использовать меньше памяти на моем сервлете? Могу ли я использовать дисковое пространство вместо памяти? или есть какой-либо другой способ, чтобы мой сервер не выдавал мне сообщение об ошибке "недостаточно памяти", если многие пользователи будут пытаться загрузить zip-файл одновременно или если размер zip-файла огромен.
public void zipJasper(List<JasperPrint> print) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream out = new ZipOutputStream(baos);
try {
int k = 1;
for (int j = 0; j <= print.size(); ++j) {
byte[] buffer = new byte[1024];
byte[] pdfAsBytes = JasperExportManager.exportReportToPdf(print.get(j));
ByteArrayInputStream fis = new ByteArrayInputStream(pdfAsBytes);
zipfile.putNextEntry(new ZipEntry(print.get(j).getName() + ".pdf"));
int length;
while ((length = fis.read(buffer, 0, 1024)) > 0) {
zipfile.write(buffer, 0, length);
}
// zipfile.closeEntry();
// close the InputStream
fis.close();
}
// zipfile.close();
} catch (JRException ex) {
log("An error occured", ex);
} catch (IOException ex) {
log("An error occured", ex);
} finally {
try {
// Flush the stream
zipfile.flush();
} catch (Exception e) {
}
try {
// Close the stream
zipfile.close();
} catch (Exception e) {
}
}
}