Ответ 1
Вы можете использовать Arrays.copyOfRange()
для этого.
Можно ли получить конкретные байты из массива байтов в java?
У меня есть массив байтов:
byte[] abc = new byte[512];
и я хочу иметь 3 разных байтовых массива из этого массива.
Я пробовал abc.read(byte[], offset,length)
, но он работает, только если я даю смещение как 0, для любого другого значения он генерирует исключение IndexOutOfbounds
.
Что я делаю неправильно?
Вы можете использовать Arrays.copyOfRange()
для этого.
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;
}
Вы можете использовать байтовые буферы в качестве представлений поверх исходного массива.