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.
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?
Vous pouvez utiliser Arrays.copyOfRange()
pour cela.
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;
}
Vous pouvez également utiliser des tampons d'octets comme vues au-dessus du tableau d'origine.