On Mon, 17 Oct 2005, Ondřej Fafejta KYBERIE wrote:
Zdravím konferenci!
Narazil jsem na zajímavý problém při parseování emailů pomocí API JavaMail.
Viz. kód
Part p; // ... viz. API JavaMail
// ...
Object o = p.getContent();
if (o instanceof InputStream){
InputStream is = (InputStream)o;
byte data[]=new byte[is.available()];
int res=is.read(data);
System.out.println("Nacteno "+res+" xxx velikost pole "+data.length);
}
Výsledek je dosti překvapivý:
Nacteno 64509 xxx velikost pole 65357
Pokud jsem to zkoušel s FileInputStream nebo s ByteArrayInputStream, tak
to fungovalo správně.
Problém se vyskytuje při použití API JavaMail v případě, že se snažím
vrátit data přílohy.
Co dělám špatně?
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