Intente enviarlos en trozos junto con Transfer-Encoding:
chunked
. Más detalles en wikipedia.
actualización según los comentarios, he aquí un ejemplo de cómo un "ChunkedOutputStream" en Java puede verse como:
package com.stackoverflow.q2395192;
import java.io.IOException;
import java.io.OutputStream;
public class ChunkedOutputStream extends OutputStream {
private static final byte[] CRLF = "\r\n".getBytes();
private OutputStream output = null;
public ChunkedOutputStream(OutputStream output) {
this.output = output;
}
@Override
public void write(int i) throws IOException {
write(new byte[] { (byte) i }, 0, 1);
}
@Override
public void write(byte[] b, int offset, int length) throws IOException {
writeHeader(length);
output.write(CRLF, 0, CRLF.length);
output.write(b, offset, length);
output.write(CRLF, 0, CRLF.length);
}
@Override
public void flush() throws IOException {
output.flush();
}
@Override
public void close() throws IOException {
writeHeader(0);
output.write(CRLF, 0, CRLF.length);
output.write(CRLF, 0, CRLF.length);
output.close();
}
private void writeHeader(int length) throws IOException {
byte[] header = Integer.toHexString(length).getBytes();
output.write(header, 0, header.length);
}
}
... que básicamente se puede utilizar como:
OutputStream output = new ChunkedOutputStream(response.getOutputStream());
output.write(....);
Usted ve en la fuente, cada pedazo de datos existe de un encabezado que representa la longitud de los datos en hexadecimal, un CRLF, los datos reales y un CRLF. El final de la secuencia está representado por un encabezado que indica una longitud 0 y dos CRLF.
Nota: a pesar del ejemplo, que realmente hacen no lo necesitan en una aplicación web basada en JSP/Servlet. Cuando la longitud del contenido no se establece en una respuesta, el contenedor web los transferirá automáticamente en fragmentos.
He intentado usar trozos, y Firefox se bloqueaba al recibirlos. Estoy transfiriendo datos binarios, ¿tengo que convertirlos a hexadecimal para usar fragmentos? ¿Hay alguna biblioteca .NET disponible para esto? – jocull
No, no es necesario convertir. Y esperaría que .NET maneje esto automáticamente si no especifica la longitud del contenido por adelantado. –
Haga clic en el enlace detrás de 'chunked' y en el enlace de wikipedia para tener una idea de cómo debería ser. No hago .NET, así que no puedo dar mucho, pero puedo dar un ejemplo basado en Java en el sabor de un 'OutputStream' extendido. Hazle saber si te gustaría verlo. – BalusC