Zdravim,
odpovedi nize....

2008/3/13 Jozef Babjak <[EMAIL PROTECTED]>:
> >  >  >  me se nejak nelibi ten cyklus, vetsinou ho pisu takhle:
>  >  >  >  -----------------------------
>  >  >  >  while( ( bytesRead = in.read(buffer) ) > 0 ){
>  >  >
>  >  >   ^-- Postfixny cyklus je pouzity preto, lebo v kazdej iteracii
>  >  >  potrebujem naalokovat novy buffer.
>  >  Zajimalo by me proc potrebujete alokovat pokazde novy buffer. Doposud
>  >  jsem pri cteni z InputStreamu vzdy cetl do stejneho bufferu a nemel
>  >  jsem problem
>
>   ^-- To je velmi jednoduche: lebo tie udaje potrebujem. :-)
>
>  Presnejsie: citam zo siete stream, konkretne odpoved HTTP servera,
>  ak by na tom zalezalo. Tato odpoved moze mat niekolko desiatok bajtov,
>  ale kludne moze mat 10MB. Takze nemozem dopredu vediet, aky velky
>  buffer bude dostatocny na nacitanie udajov. Preto citam udaje po castiach
>  s velkostou CHUNK a tieto casti si odkladam (kazdu ulozim do BasicContent,
>  a tieto objekty skladam do AggregatedContent); citanie ukoncim, ak sa
>  nacita prvy "neplny" buffer.
>
>  Problem je, ze prvy "neplny" buffer sa nacita skor, ako by sa doslo na koniec
>  streamu, a tato situacia je tym pravdepodobnejsia, cim je spojenie so 
> serverom
>  pomalsie alebo generovanie tohto obsahu trva dlhsie. Nedojde vsak k 
> predcasnemu
>  uzatvoreniu ci vypadku spojenia, co by -- dufam -- bolo signalizovane 
> vynimkou.
>
To chapu, ale ten buffer muzete samozrejme "recyklovat", InputStream
vam do nej nakopiruje data ze vstupu a je mu jedno ze tam predtim
nejaka data byla.
Jediny problem by byl pokud by konstruktor  new BasicContent(buffer,
bytesRead) predany buffer sebere pro sebe, coz nepredpokladam (bylo by
to velmi nestandardni reseni).




>
>  >  >  3.B) Nacitalo sa menej ako CHUNK bajtov; patrne sa docitalo do konca
>  >  >  streamu a teda dalej citat nemusim.
>  >
>  >  Obavam se ze zde je chyba - v javadocu jsem nenasel zminku ze musi
>  >  nacist presne tolik byte jako je delka bufferu, je tam zminka ze nacte
>  >  alespon 1 byte.
>  >  Je to sice na prvni pohled nelogicke (proc by to delal?), ale asi to
>  >  muze zpusobovat vas problem.
>
>   ^-- Ako konkretne to ma sposobovat moj problem? Stale nerozumiem.
>
No, obavam se ze InputStream vam nakopirovava do daneho bufferu
vetsinou tolik byte jako je delka bufferu, ale obcas se rozhodne tam
nakopirovat min, i kdyz ma dalsi data k dispozici.
Bohuzel toho se chytne vase podminka
--------------------------------------------
while (bytesRead == CHUNK);
------------------------------------------
a usoudi ze uz dorazila vsechna data, i kdyz tomu tak neni.

(t.j. chyba je patrne ve vasem predpokladu
---------------------------------------------------
3.B) Nacitalo sa menej ako CHUNK bajtov; patrne sa docitalo do konca
streamu a teda dalej citat nemusim )
------------------------------------------------------
Doporucoval bych drzet se toho co rika javadoc (read vraci pocet
nactenych byte, nebo -1 kdyz je konec), a neusuzovat na zadne dalsi
chovani
a kontrolovat ze bylo nacteno nezaporne mnozstvi byte

S pozdravem,
Jindrich Vimr

-- 
Jindrich Vimr
<[EMAIL PROTECTED]>, <[EMAIL PROTECTED]>
http://www.jesta.net
Nyranska 46, 323 00 Plzen, Czech Republic
GSM: +420 604 711 457

Odpovedet emailem