On Wednesday 19 of October 2005 08:46, Patrik Beno wrote:
> > Díky za odpověd.
> > V tomto případě mě chybí stejně to nejpodstatnější - jak mám určit
> > velikost pole data (size), aby se mi tam celý obsah streamu vešel?
>
> no
> a) bud mas sposob ako zistit velkost pola ako napr. v pripade suboru:
>       byte[] buffer = new byte[ file.size() ]; // alebo ako to je :-)
>    a v tom pripade mas po starostiach

Samozrejme pokud sis soubor zamknul na urovni OS, aby ti do nej nekdo neco 
neappendnul. Pak by ti preteklo pole a byl bys vis kde i s veskerou 
optimalizaci ;-)

> b) alebo je velkost vopred neznama a v tom pripade je lepsie kopirovat
>    stream-to-stream do ByteArrayOutputstreamu. lepsie to nebude :-)

,coz je obecny pripad a s tim proste nic nenadelas.
Jeste mne napadla treti moznost, a to poslat si pocet bytu streamu nejak 
dopredu - treba jako prvni ctyri bajty tohoto proudu. Ale zase je to o tom, 
ze musis mit zdroj proudu zamceny proti pripadnym zmenam, takze doporcuji si 
s tim vubec nehrat (pokud se to teda nesnazis dostat do Nokie 3410 ;-)

> --patrik
>
> > to bych musel udělat něco takového (píšu to z hlavy, tak že to není
> > vyzkoušené)
> >
> > InputStream in;
> > byte[] data = new byte[1024];  // vychozi velikost pole
> > int read = 0;
> > int pos = 0;
> >
> > while(read !=-1){
> >   read=in.read(data, pos, data.length-pos);
> >   if(read==data.length-pos){
> >     byte[] newData= new byte[2*data.length];         // vytvorime
> > pole dvakrat delsi nez puvodni velikost
> >     System.arraycopy(data,0,newData,0,data.length);  //
> > zkopirujem data do noveho vetsiho pole
> >     data=newData;
> >    }
> >   if(read!=-1) pos+=read;
> > }
> >
> > Na závěr stejně potřebuju pole o velikosti přílohy, tak že bych
> > ještě jednou musel použít arraycopy.
> >
> > byte[] finalData=new byte[pos];
> > System.arraycopy(data,0,finalData,0,pos);
> >
> > Tento způsob mě také napadl, ale připadal mi strašně složitý, pomalý a
> > těžkopádný.
> >
> > Na java.nio se ještě podívám.
> >
> > Zatím jsem to vyřešil tak, že ten buffer, do kterého načítám přílohy, je
> > dostatečně veliký. Vím to z toho důvodu, že nastavím velikost bufferu na
> > velikost celého emailu. Tedy příloha je vždy menší než celý email.
> > Kopírování pomocí System.arraycopy provedu pouze jednou u každé přílohy.
> >
> > Díky
> > Fafi

-- 
Oto 'tapik' Buchta, [EMAIL PROTECTED]
Senior Engineer, Systinet Corp,
http://www.systinet.com

Odpovedet emailem