Существует ли эквивалент memcpy () в Java?

Я имею байт [] и хотел бы скопировать его в другой байт []. Возможно, я показываю свою простую историю 'C' здесь, но являюсь там эквивалентом memcpy () на массивах байтов в Java?

76
задан simon 25 July 2010 в 12:21
поделиться

5 ответов

Вы можете попробовать System.arraycopy или использовать функции массива в классе Arrays , например java.util.Arrays.copyOf . Оба должны дать вам исходную производительность под капотом.

Arrays.copyOf, вероятно, удобен для чтения, но был введен только в java 1.6.

 byte[] src = {1, 2, 3, 4};
 byte[] dst = Arrays.copyOf(src, src.length);
 System.out.println(Arrays.toString(dst));
83
ответ дан 24 November 2019 в 11:09
поделиться

Используйте System.arraycopy ()

System.arraycopy(sourceArray, 
                 sourceStartIndex,
                 targetArray,
                 targetStartIndex,
                 length);

Пример,

String[] source = { "alpha", "beta", "gamma" };
String[] target = new String[source.length];
System.arraycopy(source, 0, target, 0, source.length);


или используйте Arrays.copyOf ()
Пример ,

target = Arrays.copyOf(source, length);

java.util.Arrays.copyOf (byte [] source, int length) был добавлен в JDK 1.6.

Метод copyOf () использует System.arrayCopy () для создания копии массива, но он более гибкий, чем clone () , поскольку вы может делать копии частей массива.

95
ответ дан 24 November 2019 в 11:09
поделиться

Если вам просто нужна точная копия одномерного массива, используйте clone () .

byte[] array = { 0x0A, 0x01 };
byte[] copy = array.clone();

Для других операций копирования массива используйте System.arrayCopy / Arrays.copyOf , как Том предлагает .

В общем, следует избегать клона , но это исключение из правил.

8
ответ дан 24 November 2019 в 11:09
поделиться

Вы можете использовать System.arrayCopy . Он копирует элементы из исходного массива в целевой массив. Реализация Sun использует ассемблер, оптимизированный вручную, так что это быстро.

5
ответ дан 24 November 2019 в 11:09
поделиться

Вы можете использовать System.arraycopy

2
ответ дан 24 November 2019 в 11:09
поделиться
Другие вопросы по тегам:

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