Eu criei uma servlet genérica aqui que serve para baixar uma série de conteúdos gerados dinamicamente pela minha aplicação.
Copiei o trecho mais importante aqui
if (conteudo instanceof byte[]) {
response.getOutputStream().write((byte[])conteudo);
response.getOutputStream().flush();
response.getOutputStream().close();
} if (conteudo instanceof InputStream) {
IOUtils.copy((InputStream)conteudo, response.getOutputStream());
IOUtils.closeQuietly((InputStream)conteudo);
} else {
PrintWriter out = new PrintWriter(response.getOutputStream());
out.print(conteudo);
out.flush();
out.close();
}
No caso, as vezes tenho um relatório em PDF que vem como um byte[], porém ao começar a baixar pelo navegador, percebi que o navegador baixa tudo primeiro, para depois exibir. Mas já percebi que ao navegar por ai, o plugin do adobe reader, já exibe enquanto vai baixando o PDF, sempre acreditei que minha servlet funcionasse dessa forma.
Então vem a pergunta: Isso é alguma configuração do Adobe? ou a maneira como escrevo o byte[] no response? Se eu escrever byte a byte, isso aconteceria?
OBS: ATENÇÃO ESSA SERVLET FUNCIONA EM PRODUÇÃO A DOIS ANOS.