2010-02-12 18 views
25

È possibile ottenere byte specifici da un array di byte in java?Divisione dell'array Byte

ho un array di byte:

byte[] abc = new byte[512]; 

e voglio avere 3 diversi array di byte da questo array.

  1. byte 0-127
  2. byte 128-255
  3. byte256-511.

ho cercato abc.read(byte[], offset,length) ma funziona solo se mi danno Offset 0, per ogni altro valore viene generata un'eccezione IndexOutOfbounds.

Cosa sto sbagliando?

+0

L'offset è nell'array di destinazione, non in quello di origine. – charlie

risposta

58

È possibile utilizzare Arrays.copyOfRange() per quello.

+4

Whoa. Non lo sapevo. –

+0

@Jonathan Feinberg: È nuovo in Java 6. – Powerlord

+0

Grazie mille. Funziona senza errori !!! –

12

Arrays.copyOfRange() viene introdotto in Java 1.6. Se si dispone di una versione precedente, si utilizza internamente System.arraycopy(...). Ecco come è implementato:

public static <U> U[] copyOfRange(U[] original, int from, int to) { 
    Class<? extends U[]> newType = (Class<? extends U[]>) original.getClass(); 
    int newLength = to - from; 
    if (newLength < 0) { 
     throw new IllegalArgumentException(from + " > " + to); 
    } 
    U[] copy = ((Object) newType == (Object)Object[].class) 
     ? (U[]) new Object[newLength] 
     : (U[]) Array.newInstance(newType.getComponentType(), newLength); 
    System.arraycopy(original, from, copy, 0, 
        Math.min(original.length - from, newLength)); 
    return copy; 
} 
+0

-1 questo non è lo stesso della versione standard. Non è sicuro dal punto di vista del tipo (puoi passarlo a un 'Integer []' e assegnare il risultato a una variabile 'String []'.) 'Arrays.copyOfRange (T [], int, int)' restituisce 'T [] '. Potresti mescolarlo con l'altra versione che accetta un argomento 'Class'. – finnw

+1

@finnw: l'altro metodo è solo sovraccarico. Li ho uniti ma ho dimenticato di rimuovere il 2 ° parametro di tipo. Ora è riparato. – Bozho

1

È possibile utilizzare buffer di byte anche come viste sopra l'array originale.