J'ai un byte[] et je voudrais le copier dans un autre byte[]. Peut-être que je montre ici mes simples connaissances en 'C', mais existe-t-il un équivalent de memcpy() sur les tableaux d'octets en Java ?
Réponses
Trop de publicités?Utilisez System.arraycopy()
System.arraycopy(sourceArray,
sourceStartIndex,
targetArray,
targetStartIndex,
length);
Exemple,
String[] source = { "alpha", "beta", "gamma" };
String[] target = new String[source.length];
System.arraycopy(source, 0, target, 0, source.length);
ou utiliser Arrays.copyOf()
Exemple,
target = Arrays.copyOf(source, length);
java.util.Arrays.copyOf(byte[] source, int length)
a été ajouté dans le JDK 1.6.
Le site copyOf()
la méthode utilise System.arrayCopy()
pour faire une copie du tableau, mais est plus flexible que clone()
puisque vous pouvez faire des copies des parties d'un tableau.
Vous pouvez essayer System.arraycopy
ou utiliser les fonctions de tableau dans le Arrays
classe comme java.util.Arrays.copyOf
. Les deux devraient vous offrir des performances natives sous le capot.
Arrays.copyOf est probablement favorable à la lisibilité, mais n'a été introduit qu'en java 1.6.
byte[] src = {1, 2, 3, 4};
byte[] dst = Arrays.copyOf(src, src.length);
System.out.println(Arrays.toString(dst));
Si vous voulez juste une copie exacte d'un tableau unidimensionnel, utilisez [clone()
](http://java.sun.com/javase/6/docs/api/java/lang/Object.html#clone()) .
byte[] array = { 0x0A, 0x01 };
byte[] copy = array.clone();
Pour les autres opérations de copie de tableau, utilisez System.arrayCopy
/ Arrays.copyOf
como Tom suggère .
En général, clone
devrait être évitée, 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é pour la main, donc c'est rapide.
Java a en fait quelque chose comme memcpy(). La classe Unsafe possède une méthode copyMemory() qui est essentiellement identique à memcpy(). Bien sûr, comme memcpy(), elle 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 d'adresses réelles à des adresses réelles ou de références à des références. Notez que si des références sont utilisées, vous devez fournir un offset (ou la JVM mourra ASAP).
Unsafe.copyMemory() fonctionne (jusqu'à 2 Go par seconde sur mon vieux PC fatigué). A utiliser à vos risques et périls. Notez que la classe Unsafe n'existe pas pour toutes les implémentations de la JVM.
- Réponses précédentes
- Plus de réponses