[Java lista] referencia

Zsombor gzsombor at gmail.com
2010. Május. 6., Cs, 15:49:12 CEST


2010/5/6 Laja <laja at freemail.hu>

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


Ez elég rémisztő ötletnek tüník, sosem szabad elfelejteni, hogy a típusok a
barátaid, valamint a függvénynek lehet kimeneti értéket megadni.
Tehát, rakd szét három függvénybe a dolgot :

public void processPdf(String pdfFile) {
  PDDocument pdd=PDDocument.load(pdfFile);
  processPdd(pdd);
  pdd.save(pdfFile);
}

public byte[] process(byte[] input) {
   ByteArrayInputStream is=new ByteArrayInputStream(input);
   PDDocument pdd=PDDocument.load(is);
   return pdd.toByteArray();
}


ĂĽdv
 Zs
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20100506/89cbffde/attachment.html 


További információk a(z) Javalist levelezőlistáról