System.arraycopy ergibt anderes Resultat als for-loop

JavaGamer

Bekanntes Mitglied
Hi,

ich möchte einen Array so performant wie möglich in Java kopieren und stoße dabei nun auf folgendes Problem:

System.arraycopy Ausgabe:
0x43 0x0 0x0 0x0 0x1 0x6f 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0

for-Loop Ausgabe:
0x43 0x68 0x65 0x72 0x6e 0x6f 0x0 0x0 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0

Java:
    public static int writeBytes(byte[] dest, int pointer, byte[] src) {
        System.arraycopy(src, 0, dest, pointer, src.length);
        return ++pointer;
    }

Java:
    public static int writeBytes(byte[] dest, int pointer, byte[] src) {
        for(int i = 0; i < src.length; i++)
            dest[pointer++] = src[i];
        return pointer;
    }

Wieso bekomme ich nun zwei unterschiedliche Ergebnisse heraus? Und wie kann ich dieses Problem beheben??

JavaGamer
 
Bei mir sind die Arrays am ende identisch. natürlich kriegst du am ende andere Rückgabewerte raus, da du bei der arraycopy Variante den pointer nur einmal inkrementierst, während du bei der anderen Methode den pointer src.length mal erhöhst .
 
Bei mir sind die Arrays am ende identisch. natürlich kriegst du am ende andere Rückgabewerte raus, da du bei der arraycopy Variante den pointer nur einmal inkrementierst, während du bei der anderen Methode den pointer src.length mal erhöhst .
Hm... Dies ergibt dann ein Problem, da so viele Daten passen garantiert nicht an die eine Stelle vom Array. Nicht bei dem was ich damit vorhabe.
Gibt es denn irgendeine andere Möglichkeit den Array ohne for-loop in meinen Array reinzukopieren, so dass der "pointer" erhöht wird, da wenn sich dieser nur um eins erhöht wird direkt an der Stelle danach wieder Daten reingeschrieben, wo aber noch der andere Array-Teil hinmuss.

Da wie man bisher sieht ist ja das ganze Teil des Byte-Arrays der in das andere Byte-Array hineingeschrieben wurde: 0x43 0x68 0x65 0x72 0x6e 0x6f

Und bei System.arraycopy sieht man hingegen nur 0x43 und irgendwo taucht dann mal die 0x6f im Array auf. Dabei müsste dies bei beiden gleich sein und der pointer am Ende an der selben Stelle stehen, damit mein Ziel funktioniert, da dieser destination Array soll am Ende gespeichert und irgendwann dann mal wieder ausgelesen werden.

Der dest Array hat übrigens eine Länge von 16.
 

Zurück
Oben