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



Odpovedet emailem