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