[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