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