Tuesday, October 18, 2005, 8:58:12 AM, you wrote:

> ---
> 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í?



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;
      }

      
alebo potom java.nio
(toto je priklad na kopirovanie suborov, ale po uprave na nejaky byte
buffer by to malo byt ekvivalentne jednoduche, snad)

      srcChannel = new FileInputStream(src).getChannel();
      dstChannel = new FileOutputStream(new File(buildDir, path)).getChannel();
      dstChannel.transferFrom(srcChannel, 0, srcChannel.size());

-- 
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