Fractionnement d'un tableau D'octets

Est-il possible d'obtenir des octets à 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 offset comme 0, pour toute autre valeur, il lance une exception IndexOutOfbounds.

Qu'est-ce que je fais de mal?

27
demandé sur bluish 2010-02-12 20:54:30

3 réponses

Vous pouvez utiliser Arrays.copyOfRange() pour cela.

61
répondu tangens 2010-02-12 17:56:04

Arrays.copyOfRange() est introduit dans Java 1.6. Si vous avez une version plus ancienne, il utilise en interneSystem.arraycopy(...). Voici comment il 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;
}
13
répondu Bozho 2010-02-12 19:55:00

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

1
répondu Ron 2010-02-12 19:27:10