Stepan Roh wrote:

> Spatne pouzivate metodu available(). Ta vraci pocet bytu, ktere lze
> precist aniz by se volajici zablokoval. V tomto pripade je to zrejme
> velikost interniho bufferu onoho proudu. S poctem bytu, ktere se daji
> z proudu precist tato hodnota nema nic spolecneho. Data je treba cist
> tak dlouho nez metoda read() vrati -1.
>
> S pozdravem,
>
> Stepan Roh

Díky za odpověď.

Zarazilo mě pouze to, že pokud použiju FileInputStream nebo
ByteArrayInputStream,
tak mi metoda available vrátí stejnou hodnotu jako metoda read.

---
Jde o to, že stejně potřebuji načíst celou přílohu do paměti.
Musím tedy vytvořit dvě pole. První o velikosti vrácené metodou
available() a druhé o velikosti vrácené metodou read()?
Přijde mi to hrozné mrhání pamětí :-(.

InputStream is = (InputStream)o;
byte data[]=new byte[is.available()];
int len=is.read(data);
byte finalData[]=new byte[len];
System.arraycopy(data,0,finalData,0,len);

Napadá vás jednodušší a lepší řešení?

Díky
Fafi

Odpovedet emailem