[Java lista] referencia
Laja
laja at freemail.hu
2010. Május. 6., Cs, 15:42:16 CEST
Hi!
Újabb érdekes problémám van. Hogyen lehet valahogy kikényszeríteni, hogy
egy értékadás cím (referencia, pointer) szerint történjen? Írok egy
példát, hogy érthető legyen:
Van egy függvény, ami paraméterként kap egy PDF állományt, amit aztán
módosít. Az állományt kaphatja memóriában (byte tömbként), vagy az
állománynevet (azért a kavarás, hogy legyen is némi értelme a példának).
private void processX(Object pdf){
try{
//beolvassuk az állományt
PDDocument pdd=null;
if(pdf instanceof String){ //állománynév van megadva
pdd=PDDocument.load((String)pdf);
}else{ //byte[] van megadva
ByteArrayInputStream is=new ByteArrayInputStream((byte[])pdf);
pdd=PDDocument.load(is);
is.close();
}
//mindenfélét csinálunk a pdd-vel
//eredményt kiírjuk
if(pdf instanceof String){ //állománynév van megadva
pdd.save((String)pdf);
}else{ //byte[] van megadva
ByteArrayOutputStream os=new ByteArrayOutputStream();
pdd.save(os);
pdf=os.toByteArray();
os.close();
}
pdd.close();
}catch(java.lang.Exception exc){
System.err.println("ERROR exc="+exc);
}
}
A fileneves résszel nincs is gond, de a tömbössel igen. Ugyanis a
'pdf=os.toByteArray();' értékadás során egy új lokális pdf jön létre,
ami nyilván nem jó, mert így elvesznek a módosítások. Az 'arraycopy' nem
jó, mert az új tömb nagyobb is lehet. Hogy lehet megoldani, hogy az
eredeti 'pdf'-et írjam felül??
Kerülő megoldás, hogy a pdf-et belerakom egy Vector-ba, és azt adom át
paraméterként (gondolom ez működik, mivel csak a Vector egy elemét írom
felül, a Vector ugyanaz marad), de ha lehet ez nélkül szeretném megoldani.
Laja
További információk a(z) Javalist levelezőlistáról