Zdarvim,
vim ze chybu to nejspise neresi, ale ten problem me zajima, treba se
neco priucim....

2008/3/13 Jozef Babjak <[EMAIL PROTECTED]>:
> Dakujem obom za poznamky k riadeniu flow tej metody; obavam sa ale, ze moj
>  problem neriesia. IMHO jedina "chyba" v tom flow je zbytocne 'else',
>  kedze 'if' vetva
>  konci prikazom 'break'.
>
>
>  >  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


>
>
>  >  ( vo tom vasem se mi nejak nelibi to   while (bytesRead == CHUNK); )
>
>   ^-- Logika toho cyklu je zalozena na tom, ze read(byte[]) moze v
>  principe skoncit tromi sposobmi:
>
>  1) Vyhodi vynimku; k tomu v tomto pripade nedojde.
>
>  2) Dosiahol sa end-of-stream a vrati -1; osetrene break-om; cuduj sa
>  svete, ani k tomuto nikdy nedojde.
>
>  3) Nacita up to CHUNK bajtov, umiestni ich do pola buffer a vrati
>  hodnotu, kolko nacitala, pricom BLOKUJE
>  pri nedostupnosti dalsich udajov, takze to, ze udaje prichadzaju po
>  castiach, de facto nemusim riesit. V tomto
>  pripade mam 2 moznosti, ako zareagovat:
>
>  3.A) Nacitalo sa prave CHUNK bajtov, t.j. cele pole; pole niekam
>  ulozim (do BasicContent, ktory ulozim do
>  AggregatedContent) a musim citat dalej (do noveho bufferu v dalsej
>  iteracii), lebo sa patrne este neprecital cely stream.
>
>  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.
Take to asi bude duvod proc v pripade jednodussiho cyklu (while read >
0) jsem nikdy podobny problem nemel...





>
>  Chyba je -- podla mojich pokusov -- v tomto bode 3.B. Zmena zaverecnej
>  podmienky cyklu na
>
>  while(bytesRead >= 0);
>
>  alebo kludne na
>
>  while(true);
>
>  sposobi, ze slucka sa zopakuje aj po prvom "neuplnom" nacitani bufferu
>  (t.j. readBytes < CHUNK) este raz
>  a program zostane visiet vo volani in.read(); cakal by som, ze volanie
>  read() vrati okamzite -1.
>
>  No a tu vidim rozpor: Ak bol stream docitany do konca, read() ma
>  vratit -1, nie sa blokovat. Ak ale nebol docitany
>  do konca, preco sa read() neblokoval pri "predchadzajucom" volani a
>  nedocital buffer doplna, az po CHUNK?
>
>
>  >  Pripadne obalit vstupni stream BufferedOutputStreamem......
>
>  BufferedInputStreamom patrne. Vyskusam.
>
>  J.
>

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