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?Vous pouvez utiliser System.arraycopy
Utilisez byteBufferViewVarHandle ou byteArrayViewVarHandle.
Cela vous permettra de copier un tableau de "longs" directement vers un tableau de "doubles" et similaires avec quelque chose comme :
public long[] toLongs(byte[] buf) {
int end = buf.length >> 3;
long[] newArray = new long[end];
for (int ii = 0; ii < end; ++ii) {
newArray[ii] = (long)AS_LONGS_VH.get(buf, ALIGN_OFFSET + ii << 3);
}
}
private static final ALIGN_OFFSET = ByteBuffer.wrap(new byte[0]).alignmentOffset(8);
private static final VarHandle AS_LONGS_VH = MethodHandles.byteArrayViewVarHandle(long[].class, ByteOrder.nativeOrder());
Cela vous permettra de faire les piratages que vous souhaitez :
float thefloat = 0.4;
int floatBits;
_Static_assert(sizeof theFloat == sizeof floatBits, "this bit twiddling hack requires floats to be equal in size to ints");
memcpy(&floatBits, &thefloat, sizeof floatBits);
Non. Java n'a pas d'équivalent à memcpy
. Java a un équivalent de memmove
à la place.
Si les arguments src et dest font référence au même objet tableau, alors la copie est effectuée comme si les composants aux positions srcPos à srcPos+longueur-1 étaient d'abord copiés dans un tableau temporaire avec des composants de longueur, puis le contenu du tableau temporaire était copié aux positions destPos à destPos+longueur-1 du tableau de destination.
Il est très probable System.arraycopy
n'aura jamais les mêmes performances que memcpy
si src
y dest
font référence au même tableau. En général, cela sera assez rapide.
- Réponses précédentes
- Plus de réponses