Provare a inviarli in blocchi insieme a Transfer-Encoding:
chunked
. Maggiori dettagli in wikipedia.
Aggiornamento come per i commenti, ecco un esempio di come un "ChunkedOutputStream" in Java può apparire come:
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);
}
}
... che può essere utilizzato come sostanzialmente:
OutputStream output = new ChunkedOutputStream(response.getOutputStream());
output.write(....);
Vedete nella fonte, ogni pezzo di dati esiste di un'intestazione che rappresenta la lunghezza dei dati in esadecimale, un CRLF, i dati effettivi e un CRLF. La fine del flusso è rappresentata da un'intestazione che indica una lunghezza 0 e due CRLF.
Nota: nonostante l'esempio, che effettivamente fare non bisogno in un webapplication basato JSP/Servlet. Ogni volta che la lunghezza del contenuto non è impostata su una risposta, il webcontainer li trasferirà automaticamente in blocchi.
Ho provato a utilizzare i blocchi e Firefox si bloccava quando li riceveva. Sto trasferendo dati binari, devo convertirlo in esadecimale per usare i pezzi? Ci sono delle librerie .NET disponibili per questo? – jocull
No, non è necessario convertire. E mi aspetto che .NET gestisca questo automaticamente se non specifichi la lunghezza del contenuto in anticipo. –
Fai clic sul collegamento dietro "Chunked" e sul link di Wikipedia per avere un'idea di come dovrebbe essere. Non lo faccio. NET, quindi non posso dare molto, ma posso dare un esempio basato su Java in un esteso 'OutputStream'. Fai sapere se ti piacerebbe vederlo. – BalusC