Y a-t-il un équivalent à memcpy () en Java?

J’ai un octet [] et je voudrais le copier dans un autre octet []. Peut-être que je montre mon fond simple “C” ici, mais y a-t-il un équivalent à memcpy () sur les tableaux d’octets en Java?

Vous pouvez essayer System.arraycopy ou utiliser des fonctions de tableau dans la classe Arrays comme java.util.Arrays.copyOf . Les deux devraient vous donner une performance native sous le capot.

Arrays.copyOf est probablement favorable à la lisibilité, mais n’a été introduit que dans java 1.6.

  byte[] src = {1, 2, 3, 4}; byte[] dst = Arrays.copyOf(src, src.length); System.out.println(Arrays.toSsortingng(dst)); 

Utilisez System.arraycopy ()

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

Exemple,

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

ou utilisez Arrays.copyOf ()
Exemple,

 target = Arrays.copyOf(source, length); 

java.util.Arrays.copyOf(byte[] source, int length) été ajouté dans JDK 1.6.

La méthode copyOf() utilise System.arrayCopy() pour créer une copie du tableau, mais est plus flexible que clone() car vous pouvez faire des copies de parties d’un tableau.

Si vous voulez juste une copie exacte d’un tableau à une dimension, utilisez clone() .

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

Pour les autres opérations de copie de tableaux, utilisez System.arrayCopy / Arrays.copyOf comme le suggère Tom .

En général, le clone doit être évité, mais il s’agit d’une exception à la règle.

Vous pouvez utiliser System.arrayCopy . Il copie les éléments d’un tableau source vers un tableau de destination. L’implémentation Sun utilise un assembleur optimisé à la main, donc c’est rapide.

Java a en fait quelque chose comme memcpy (). La classe Unsafe a une méthode copyMemory () essentiellement identique à memcpy (). Bien sûr, comme memcpy (), il ne fournit aucune protection contre les superpositions de mémoire, la destruction de données, etc. Il n’est pas clair si c’est vraiment un memcpy () ou un memmove (). Il peut être utilisé pour copier des adresses réelles vers des adresses réelles ou des références à des références. Notez que si des références sont utilisées, vous devez fournir un décalage (ou la JVM mourra ASAP).

Unsafe.copyMemory () fonctionne (jusqu’à 2 Go par seconde sur mon ancien PC fatigué). À utiliser à vos risques et périls. Notez que la classe Unsafe n’existe pas pour toutes les implémentations JVM.

Vous pouvez utiliser System.arraycopy