Zdravim,
me se nejak nelibi ten cyklus, vetsinou ho pisu takhle:
-----------------------------
while( ( bytesRead = in.read(buffer) ) > 0 ){
content.addContent(new BasicContent(buffer, bytesRead));
}
----------------------------
Min kodu, min mista pro problem....
( vo tom vasem se mi nejak nelibi to while (bytesRead == CHUNK); )
Pripadne obalit vstupni stream BufferedOutputStreamem......
Jindra
2008/3/13 Jozef Babjak <[EMAIL PROTECTED]>:
> Zdravim!
>
> Moj program sa pripoji na HTTP server, posle mu HTTP/1.0 Request a
> cita odpoved z OutputStream-u prislusneho Socket-u, plusminus takto:
>
> public static RawHttpMessage read(final InputStream in) throws
> IOException {
> final Content content = new AggregatedContent();
> int bytesRead;
> do {
> final byte[] buffer = new byte[CHUNK];
> bytesRead = in.read(buffer);
> if (bytesRead == -1) {
> break;
> } else {
> content.addContent(new BasicContent(buffer,
> bytesRead));
> }
> } while (bytesRead == CHUNK);
> return new RawHttpMessage(content);
> }
>
> Toto funguje celkom uspokojivo pre vacsinu requestov. Niekedy, zial
> dost casto, sa stane,
> ze citanie sa ukonci skor, ako by sa malo, a to najma pri vacsom HTTP
> Response, napr.
> obrazku. Vyssej vrstve sa potom posle skrateny obsah, napr. HTTP
> hlavicka bez tela,
> cast obrazku a pod.
>
> Po troche laborovania som nasiel nasledujuci workaround: zmensit CHUNK
> pod hranicu,
> na ktoru sa "oreze" odpoved, aby vzdy doslo aspon k dvom prechodom
> slucky, A ZAROVEN
> pridat na zaciatok do-while cyklus Thread.sleep() s nejakou hodnotou,
> zvycajne od 50 do 100
> milisekund. Pritom cim je pomalsie spojenie na cielovy server, resp.
> cim pomalsie sa generuje
> HTTP Response, tym musi byt CHUNK mensi (k orezaniu dojde skor) a sleep
> dlhsi.
>
> Z uvedeneho sa nuka vysvetlenie, ze metoda read(byte[]) sa neblokuje
> do prichodnu dalsieho obsahu,
> ale ak ziadny obsah nie je dostupny, jednoducho citanie ukonci. Vyssie
> uvedeny kod by mal -- podla
> mna -- precitat cely input stream az po dosiahnutie jeho konca (alebo
> vyhodenia vynimky); v niektorych
> pripadoch "orezaneho citania" sa vyssie v kode po volani uvedenej
> citacej metody da zistit, ze volanie
> in.available() pre zdanlivo precitany input stream vrati kladnu hodnotu.
>
> Poradi mi niekto, ako citanie urobit inac, spolahlivejsie?
>
> J.
>
--
Jindrich Vimr
<[EMAIL PROTECTED]>, <[EMAIL PROTECTED]>
http://www.jesta.net
Nyranska 46, 323 00 Plzen, Czech Republic
GSM: +420 604 711 457