Wednesday, October 19, 2005, 8:32:40 AM, you wrote:
> Patrik Beno wrote:
>>ahoj.
>>
>>metoda InputStream.read(buf, from to) a inkrementalne plnenie buffera
>>velmi strucne a bez nejakej kontroly (snad to bude fungovat):
>>
>> InputStream in;
>> byte[] data = new byte[size];
>> int read = 0;
>> int pos = 0;
>> while (read != -1) {
>> read = in.read(data, pos, in.available());
>> pos += read;
>> }
>>
>>
> Zdravím!
> 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
b) alebo je velkost vopred neznama a v tom pripade je lepsie kopirovat
stream-to-stream do ByteArrayOutputstreamu. lepsie to nebude :-)
--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
--
Patrik Beno
J2EE Software Architect
____________________________________
Cleverlance - The Clever Enterprise Solutions
www.cleverlance.com
European Business Center
Dukelskych hrdinu 34
170 00 Praha 7
Czech Republic
Tel.: +420 266 177 166
Mobile: +420 777 929 450
Fax: +420 266 177 155