Finde den Fehler (bitte)

Gast #5412342
Lesenswert?

Mahlzeit

Ich sitze hier vor einem Javaprogram und sehe den Grund für die ständig 
kommende Exception nicht.
Es geht darum, zwei Arrays zu einem neuen Array zu verbinden.
1
DataFrame = new byte[FrameHeader.length + Data.length -2];
2
//Daten aus FrameHeader in DataFrame kopieren (1-4)            System.arraycopy(FrameHeader, 0, DataFrame, 0, FrameHeader.length -1);
3
//Daten aus Data in DataFrame kopieren (5-Data.Lenght)            System.arraycopy(Data, 0, DataFrame, FrameHeader.length, DataFrame.length -1);

Erst soll das Array 'FrameHeader' vorne reinkopiert werden, im Anschluß 
soll 'Data' dahinter reinkopiert werden. Warum kopiert Java das erste 
Array, aber ds zweite nicht und schmeißt dafür eine 
ArrayIndexOutOfBoundsException?

Sieht irgendjemand etwas, was ich nicht sehe?
Gast #5412344
Lesenswert?

Code nochmal vernünftig formatiert:
1
DataFrame = new byte[FrameHeader.length + Data.length -2];
2
//Daten aus FrameHeader in DataFrame kopieren
3
System.arraycopy(FrameHeader, 0, DataFrame, 0, FrameHeader.length -1);
4
//Daten aus Data in DataFrame kopieren
5
System.arraycopy(Data, 0, DataFrame, FrameHeader.length, DataFrame.length -1);
Gast #5412357
Lesenswert?

1.
Reduziere den Code bis auf einen den man einfach ausführen kann. So 
sieht man z.B. nicht die Definition der Arrays die du zusammenkopieren 
willst.
2.
Du schreibst zwar ArrayIndexOutOfBounds Exception, aber warum kopierst 
du nicht den kompletten fehler hier rein?

3. Warum hat das neue Arraydie Länge Array1 + Array2 - 2
Was soll die Minus 2?

Denke darüber mal nach

Nutze den Debugger, mache dir ein einfaches Beispiel mit zwei Array aus 
z.B. nur 4 und 5 Bytes und schaue was rauskommt. Dann kannst du den 
Fehler problemlos selbst finden.
Gast #5412380
Lesenswert?

Danke für die Hinweise-nein, die -2 gehören da wirklich nicht rein. Es 
macht aber keinen Unterschied, ohne funktioniert es auch nicht. Das 
DataFrame-Array ist auch lang genug.

FrameHeader.length = 4
Data.length = 2055
DataFrame.legth = 2059
Gast #5412399
Lesenswert?

Wühlhase schrieb:
> ArrayIndexOutOfBoundsException

wird nur geworfen wenn das zielarray zu klein ist, du also versuchst 
über das ende hinaus zu schreiben.
vielleicht magst du diese lösung:
1
public class JavaApplication3 {
2

3
    public static void main(String[] args) {
4
        byte[] arr1 = {'a', 'b', 'c'};
5
        byte[] arr2 = {'A', 'B', 'C', 'D'};
6
        byte[] target = null;
7
        ByteArrayOutputStream baos = new ByteArrayOutputStream(arr1.length + arr2.length); // initiallänge optional
8
        try {
9
            baos.write(arr1);
10
            baos.write(arr2);
11
            target = baos.toByteArray();
12
        } catch (IOException ex) {
13
            Logger.getLogger(JavaApplication3.class.getName()).log(Level.SEVERE, null, ex);
14
            System.exit(1);
15
        } finally {
16
            if (null == target) {
17
                System.out.println("kacke");
18
            } else {
19
                System.out.println("len: " + target.length);
20
                System.out.println("inh: " + new String(target));
21
            }
22
        }
23
    }
24
}

out:
1
run:
2
len: 7
3
inh: abcABCD
4
BUILD SUCCESSFUL (total time: 0 seconds)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren