Только вчера пришлось сделать то же самое.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(baos);
.... populate ZipOutputStream
String filename = "out.zip";
// the response variable is just a standard HttpServletResponse
response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");
response.setContentType("application/zip");
try{
response.getOutputStream().write(baos.toByteArray());
response.flushBuffer();
}
catch (IOException e){
e.printStackTrace();
}
finally{
baos.close();
}
Примечание. Я использую оболочку ByteArrayOutputStream и toByteArray, но вы, вероятно, могли бы просто записать любой другой тип Outputstream непосредственно в ответ с помощью стандартного цикла InputStream.read () OutputStream.write ().
От руки Я на самом деле не уверен, что быстрее, если таковые имеются, но я подозреваю, что мое использование ByteArrayOutputStream здесь может быть не самым сознательным подходом к памяти: