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

Odpovedet emailem