arraylist in array umwandeln

drummingmichel

Grünschnabel
hey leute!

ich habe eine datei mit hilfe von arraylists gespeichert. in die arraylists kann ich problemlos auch arrays speichern oder andere variablen zB. int.
wie ausgelsen wird weiß ich. ich erhalte dann arraylists. aber ich möchte das, was ich den arraylists gespeichert habe wieder in die ursprünglichen formate umwandeln: eine byte-, eine int-array und eine normale int-variable.
wie geht das?
habs mit C# versucht (das klappt ja manchmal bei java):


private byte[] ArrayListZuArrayByte(ArrayList al){
return (byte[])al.ToArray(typeof(byte));
}
private int[] ArrayListZuArrayInt(ArrayList al){
return (int[])al.ToArray(typeof(int));
}

aber da kommt ne fehlermeldung: ich soll hinter "byte" bzw "int" ".class" schreiben. also:

private byte[] ArrayListZuArrayByte(ArrayList al){
return (byte[])al.ToArray(typeof(byte.class));
}
private int[] ArrayListZuArrayInt(ArrayList al){
return (int[])al.ToArray(typeof(int.class));
}

das macht find ich aber keinen sinn. und dann klappt auch gar nichts mehr.
ich hoffe ihr könnt mir helfen!

danke schon mal im vorraus!
michel
 

Anime-Otaku

Erfahrenes Mitglied
Nein das ergibt auch keinen Sinn^^

Fangen wir mal am Anfang an. In einer ArrayList kann man nur Objekte speichern. Daher gibt es da kein byte sondern nur das WrapperObject Byte.

Der richtige Weg zur Zeit eine ArrayList nach Array zu konvertieren lautet:

Byte[] bytes = arrayList.toArray(new Byte[arrayList.size()]);


Du hast jedoch ein Problem dadurch, das du mit dem Objectwrapper arbeitest und nicht direkt mit dem primitiven Datentyp musst der Datentyp immer wenn nötig zurückkonvertiert werden.

Für ein kleines byte[] musst du wahrscheinlich darüber iterieren und jedes byte einzeln setzen.
 

drummingmichel

Grünschnabel
danke für deine bemühungen, aber die zeile so wie du sie hingeschrieben hast funktioniert nicht: found .Object[] but expected .Byte[]
das byte[] ist klein: index:1-6
da könnte das "iterieren" klappen (was ist das?)
aber ich hab ja auch noch ne int[]-array. die ist was größer: bis index 30000
was mach ich da?
kann ich vielleicht künstlich ein objekt erzeugen, in das ich die arrays reinschreibe und dann in die arraylist schreibe und so auch wieder auslesen kann?

nochmal danke für die hilfe!
 

cuchulainn

Mitglied
Hallo,

ich bin mir nicht sicher, ob ich dich richtig verstanden habe, aber ich versuche es trotzdem mal mit einer Antwort.

Wenn in deiner Liste keine Arrays stehen, kannst du einfach mit einer for-Schleife durch die Liste laufen (oder die Klasse Iterator verwenden) und jetzt Element rausschreiben. So ungefähr mit Bytes als Elemente:

Code:
ArrayList<byte> list = new ArrayList<byte>();
// Oder diese Deklaration
ArrayList<Byte> list = new ArrayList<Byte>();
byte myByte;
for (int i = 0; i < list.size(); i++) {
    myByte = list.get(i);
   // oder mit Konvertierung von Byte
   myByte = list.get(i).byteValue();
}

Wenn du Arrays in der Liste hast, versuche mal folgendes:


Code:
for (int i = 0; i < list.size(); i++) {
    myArray = list.get(i);
    
    for (int j = 0; j < myArray.size(); j++) {
        int wert = myArray[j];
    }
}

Du kannst auch den Inhalt einer Liste mit der Methode List.toArray() arbeiten. Sie gibt dir den Inhalt der Liste als Array zurück.

Ich hoffe, ich konnte dir ein wenig helfen.