Как оптимизировать 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) {
            }
        }
    }

0 ответов

Другие вопросы по тегам