Servlet: la réponse.setContentLength() ralentit le téléchargement en bas

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() reeeeally ralentit les téléchargements vers le bas.
Si je ne l'utilise pas ou le mettre après out.close() tout fonctionne toujours bien, mais les téléchargements sont muuuuch plus rapide.
Quelqu'un peut-il m'expliquer pourquoi et si il est nécessaire d'utiliser response.setContentLength()?

Votre question résolu un problème que j'ai avec servlet-api-3.1 dans la Jetée 9. J'ai enlevé la réponse.setContetLength() dans ma servlet; le temps de réponse correspond maintenant à ce que j'obtenais avec les précédents Jetée versions.
Heureux d'avoir eu de l'aide.

OriginalL'auteur Simon | 2012-01-10