web-dev-qa-db-fra.com

Fractionner un tableau d'octets

Est-il possible d'obtenir des octets spécifiques à partir d'un tableau d'octets en Java?

J'ai un tableau d'octets:

byte[] abc = new byte[512]; 

et je veux avoir 3 tableaux d'octets différents de ce tableau.

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

J'ai essayé abc.read(byte[], offset,length) mais cela ne fonctionne que si je donne le décalage à 0, pour toute autre valeur, il lève une exception IndexOutOfbounds.

Qu'est-ce que je fais mal?

29
Tara Singh

Vous pouvez utiliser Arrays.copyOfRange() pour cela.

64
tangens

Arrays.copyOfRange() est introduit dans Java 1.6. Si vous avez une ancienne version, elle utilise en interne System.arraycopy(...) . Voici comment est implémenté:

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;
}
14
Bozho

Vous pouvez également utiliser des tampons d'octets comme vues au-dessus du tableau d'origine.

1
Ron