У меня есть массив байтов, который я хочу копировать/клонировать для предотвращения кода вызова от изменения моего внутреннего представления.
Как я клонирую массив байтов Java?
JLS 6.4.5 Члены типа массива
Все члены типа массива следующие:
длина общедоступного конечного поля
, который содержит количество компонентов массива (длина может быть положительной или нулевой).общедоступный
методclone
, который переопределяет метод с тем же именем в классеObject
и не генерирует никаких проверенных исключений. Тип возврата метода клонирования типа массиваT []
-T []
.- Все члены унаследованы от класса
Object
; единственный методобъекта
, который не наследуется, - это его методclone
.
Таким образом:
byte[] original = ...;
byte[] copy = original.clone();
Обратите внимание, что для массива ссылочных типов clone ()
по сути является неглубокой копией .
Кроме того, в Java нет многомерных массивов; у него есть массив массивов. Таким образом, байт [] []
является объектом []
, а также подлежит неглубокой копии .
Обратите внимание, что clone ()
возвращает новый объект массива . Если вы просто хотите скопировать значения из одного массива в уже существующий массив, вы можете использовать, например, System.arraycopy
.
Также существует java.util.Arrays.copyOf
, который позволяет вам создавать копию с другой длиной (либо с усечением, либо с заполнением).
Это просто, и это отличная идея.
byte[] copy = arr.clone();
Обратите внимание, что типом возвращаемого значения метода массивов clone ()
является тип массива, поэтому приведение не требуется.