Разделение байтового массива - PullRequest
29 голосов
/ 12 февраля 2010

Можно ли получить конкретные байты из байтового массива в Java?

У меня есть байтовый массив:

byte[] abc = new byte[512]; 

и я хочу иметь 3 разных байтовых массива из этого массива.

  1. байт 0-127
  2. байт 128-255
  3. byte256-511.

Я пытался abc.read(byte[], offset,length), но он работает только в том случае, если я задаю смещение как 0, для любого другого значения он вызывает исключение IndexOutOfbounds.

Что я делаю не так?

Ответы [ 3 ]

64 голосов
/ 12 февраля 2010

Для этого вы можете использовать Arrays.copyOfRange().

14 голосов
/ 12 февраля 2010

Arrays.copyOfRange() введен в Java 1.6. Если у вас более старая версия, она внутренне использует System.arraycopy(...). Вот как это реализовано:

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;
}
1 голос
/ 12 февраля 2010

Вы также можете использовать байтовые буферы в качестве представлений поверх исходного массива.

...