Как мне клонировать массив байтов Java? - PullRequest
27 голосов
/ 09 июля 2010

У меня есть байтовый массив, который я хочу скопировать / клонировать, чтобы избежать вызова кода для изменения моего внутреннего представления.

Как мне клонировать массив байтов Java?

Ответы [ 4 ]

40 голосов
/ 09 июля 2010

JLS 6.4.5 Члены типа массива

Членами типа массива являются следующие:

  • public final field length, который содержит количество компонентов массива (длина может быть положительной или нулевой).
  • Метод public clone, который переопределяет метод с тем же именем в классе Object и не выдает никаких проверенных исключений. Тип возврата метода клона типа массива T[]: T[].
  • Все члены, унаследованные от класса Object; единственный метод Object, который не наследуется, это метод clone.

Таким образом:

byte[] original = ...;
byte[] copy = original.clone();

Обратите внимание, что для массива ссылочных типов clone() по существу является мелкой копией .

Кроме того, Java не имеет многомерных массивов; у него есть массив массивов. Таким образом, byte[][] является Object[], и также подлежит мелкой копии .

Смотри также

Смежные вопросы


Другие опции

Обратите внимание, что clone() возвращает новый объект массива. Если вы просто хотите скопировать значения из одного массива в уже существующий массив, вы можете использовать, например, System.arraycopy.

Существует также java.util.Arrays.copyOf, который позволяет создавать копии с другой длиной (усечение или заполнение).

Похожие вопросы

10 голосов
/ 09 июля 2010

System.arraycopy (src, 0, dst, 0, src.length);

7 голосов
/ 09 июля 2010

Это просто, и это хорошая идея.

byte[] copy = arr.clone();

Обратите внимание, что тип возвращаемого значения метода clone() для массивов - это тип массива, поэтому приведение не требуется.

2 голосов
/ 03 октября 2013

Чтобы избежать возможного исключения нулевого указателя, я использую следующий синтаксис:

byte[] copy = (arr == null) ? null : arr.clone();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...