У меня есть байтовый массив, который я хочу скопировать/клонировать, чтобы избежать вызова кода из моего внутреннего представления.
Как клонировать массив байтов java?
У меня есть байтовый массив, который я хочу скопировать/клонировать, чтобы избежать вызова кода из моего внутреннего представления.
Как клонировать массив байтов java?
JLS 6.4.5 Члены типа массива
Элементы типа массива являются следующими:
public final field length, который содержит количество компонентов массива (длина может быть положительной или нулевой).- Метод
publicclone, который переопределяет метод с тем же именем в классе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();