[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