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