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?
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.
Der Andere schrieb:> Was soll die Minus 2?
Berechtigter Einwand, bin automatisch davon ausgegangen, dass er das
jeweils letzte Element nicht mit kopieren möchte. Da er davon aber
nichts schrieb, gehe ich davon aus, dass der ihm der Unterschied
zwischen Anzahl der Elemente und Index nicht klar ist...
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
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
Wühlhase schrieb:> Oh man...wie auch immer, es funktioniert jetzt.
Und ist dir klar warum es jetzt funktioniert und zuvor nicht?
Sonst kommt nicht das nächste Problem, sondern das gleiche nochmal.