codice:
public class CestoFrutta {
    
    
    public static final String  ENCODING =  "IBM037";

    private String tipoCestino = ""; //1 
    private Number numeroMele=new Long(0l); //2 
    private Number numerPere=new Integer(0); //3
    private String coloreCestino = ""; //4
     
    
    //inizio lunghezze  
    private int l_coloreCestino=48;
    private int l_tipoCestino=24;
    private int l_numeroMele=12;
    private int l_numeroPere=8;
    //fine lunghezze 
    
    public CestoFrutta() {
        super();
         tipoCestino = init(l_tipoCestino);
         coloreCestino= init(l_coloreCestino);
    }
    
    public byte[] getBytes() throws Throwable {

        StringBuffer bf = new StringBuffer(this.getTipoCestino());//1
        bf.append(String.format("%12d", this.getNumeroMele()));//2
        bf.append(String.format("%8d", this.getNumerPere()));//3
        bf.append(this.getColoreCestino());//4
        return bf.toString().getBytes(ENCODING);
    }
    
    public void setBytes(byte[] array) throws Throwable {
         
        byte[] array_tipoCestino  = new byte[l_tipoCestino];
        byte[] array_numeroMele = new byte[l_numeroMele];
        byte[] array_numeroPere= new byte[l_numeroPere];
        byte[] array_coloreCestino  = new byte[l_coloreCestino];
     
        int j = 0;
        
        //1
        tipoCestino=setStr(tipoCestino, j,array_tipoCestino, array);
        j += array_tipoCestino.length;
        
        //2
        numeroMele=setNum(numeroMele, j,array_numeroMele, array);
        j += array_numeroMele.length;
        
        //3
        numerPere=setNum(numerPere, j,array_numeroPere, array);
        j += array_numeroPere.length;
        
        //4
        coloreCestino=setStr(coloreCestino, j,array_coloreCestino, array);
        j += array_coloreCestino.length;
        
    }
     
    
    private Number setNum(Number num, int j, byte[] arr1, byte[] arr2) throws UnsupportedEncodingException, ParseException{
         
        for (int i = 0; i < arr1.length; i++) {
            arr1[i] = arr2[j + i];
        }
        String str = new String(arr1, ENCODING);
        num  = NumberFormat.getInstance().parse(str.trim());
         return  num;
    }
    
    
    private String setStr(String str, int j, byte[] arr1, byte[] arr2) throws UnsupportedEncodingException, ParseException{
        
        for (int i = 0; i < arr1.length; i++) {
            arr1[i] = arr2[j + i];
        }
        str = new String(arr1, ENCODING);
         return  str;
    }
    
    private String init(int len) {
        StringBuffer bf = new StringBuffer("");
        for (int i = 0; i < len; i++) {
            bf.append(" ");
        }
        return bf.toString();
    }
     
 
    ...tutti i get e i set dei campi 
     
}
dunque, questa è una classe tipo quella che devo gestire

in sostanza il mio problema è: se guardi la getBytes e la setBytes, noterai (lo vedi dai commenti) che c'è un ordine di costruzione all'interno degli stessi metodi, che riguarda i 4 campi --- ora i campi sono 4 ma potrebbero diventare 20, e magari avrei bisogno di cambiare l'ordine --- per come è fatto il codice ora dovrei modificarlo in questa maniera (esempio nella getBytes):

prima:
codice:
StringBuffer bf = new StringBuffer(this.getTipoCestino());//1
bf.append(String.format("%12d", this.getNumeroMele()));//2
bf.append(String.format("%8d", this.getNumerPere()));//3
bf.append(this.getColoreCestino());//4
return bf.toString().getBytes(ENCODING);
codice:
dopo (inverto l'ordine tra mele e pere):
StringBuffer bf = new StringBuffer(this.getTipoCestino());//1
bf.append(String.format("%8d", this.getNumerPere()));//2
bf.append(String.format("%12d", this.getNumeroMele()));//3
bf.append(this.getColoreCestino());//4
return bf.toString().getBytes(ENCODING);
cambiando quindi la sequenza --- mi piacerebbe invece avere questi elementi legati a dei numeri e andare a toccare solo questi numeri rappresentanti l'ordine; si potrebbe fare con le liste o le mappe ma forse c'è di meglio

grazie