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