Сервлет: response.setContentLength () замедляет загрузку

private void downloadAllRelease(HttpServletRequest request,
        HttpServletResponse response) {
    LoginToken tok=getToken(request, response);
    int size = 0;
    try {
        ArrayList<Release> releases = manager.getReleases(tok.getUsername);
        ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
        for (int i=0; i<releases.size(); i++) {
            size += releases.get(i).getFile().length;
            out.putNextEntry(new ZipEntry(releases.get(i).getFilename()));
            out.write(releases.get(i).getFile());
            out.closeEntry();
        }
        response.setContentLength(size);
        response.setContentType("application/force-download");
        response.setHeader("Content-Disposition","attachment;filename=release.zip");
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

response.setContentLength () действительно замедляет загрузку.
Если я его не использую или помещаю после out.close () , все по-прежнему работает нормально, но загрузка происходит намного быстрее.
Может ли кто-нибудь объяснить мне, почему и необходимо ли использовать response.setContentLength () ?

15
задан Simon 10 January 2012 в 00:20
поделиться