Byte Array welches in Laufzeit aufgelöst wird // Objekt Array

Shardic

Mitglied
Hallo liebes Javaforum,

ich bin zwar noch ein relativer Neuling in Java, glaube aber das ich mit meinem Anliegen hier richtig bin.

Momentan habe ich das Problem, dass ich ein mehrdimensionales, sagen wir erstmal Objekt-Array, erstellen möchte und in den Objekten Variablen speichern möchte, die später zur weiteren Verarbeitung genutzt werden. Diese Variablen werden pro Typ jedoch sehr einseitig sein, so habe ich beispielsweise für Typ 1 einen bolean der true ist, einen Integer der auf 3 ist usw., für Typ 2 ist der bolean beispielweise auf false, der Integer auf 6 usw...

Meine Frage dazu: Ist es, bzw. wann ist es Sinnvoll dieses Array einfach nur zu einem Byte Integer zu ändern und später die logik über den Teil der Arrays rüberlaufen zu lassen, welche grade benötigt werden ? Dabei soll dann die Logik je nachdem was in dem Array drinsteht dem Programm bestimmte Werte für bestimmte Arrayfelder übergeben. z.B. In Stelle [1][2][3][4] ist ne 1 also ist der boolean "anzeigen" auf true und der Integer "größe" auf 5 und auf Stelle [1][2][3][7] ist ne 2 also ist der boolean "anzeigen" auf false und der Integer "größe" auf 10.

Bin mir auch gar nicht sicher, ob das so einfach geht ^^, naja ihr werdet mich schon berichtigen...

Es soll dabei um min. 3-4 dimensionale Arrays gehen, die zwischen 5 Mio. und 100 Mio. einträge haben. Davon werden aber nur zwischen 250k und 2 Mio zu einer Zeit benötigt...
Wenn ich versuche Objekte in der größenzahl zu speichern komme ich auf min. die 20-igfache Datenmenge die dann im Arbeitsspeicher drin wäre... Keine Ahnung was jetzt Sinnvoller ist, oder ob nicht die "umrechnung" über die Logik wesentlich aufwändiger wäre als wenn ich alles als Objekte beim Programmstart in einem Objektarray abspeichere.

Hoffe ihr versteht was ich meine, und vielen Dank schon mal für die Beantwortung!

Viele Grüße

Shardic
 
Zuletzt bearbeitet:
Dabei soll dann die Logik je nachdem was in dem Array drinsteht dem Programm bestimmte Werte für bestimmte Arrayfelder übergeben. z.B. In Stelle [1][2][3][4] ist ne 1 also ist der boolean "anzeigen" auf true und der Integer "größe" auf 5 und auf Stelle [1][2][3][7] ist ne 2 also ist der boolean "anzeigen" auf false und der Integer "größe" auf 10.
Ich scheitere ja spätestens bei dem Satz...und bin mir wirklich nicht sicher, wofür man einfach mal so permanent 100Mio Einträge im Speicher halten müsste. Baust du dir eine Physikengine oder was? o.ô
Ich bin mir sicher, dass es bei den meisten Anwendungen mit erheblich weniger gehen dürfte.
 
Zuletzt bearbeitet:
Also es geht mir hier um Prozedurales Generieren von eventuellen Karten, Wäldern, Städten etc.... Dafür habe ich momentan ein Byte Array mit 500x500x40... macht momentan eine Größe von 10 Mio. Einträgen, ich interessiere mich allerdings auch eben dafür ob es möglich ist, dass ohne weiteres zu vergrößern. Bzw. mehrere dieser Arrays nebeneinander zu legen.

Oder ist es besser in solch einem Fall das gesamte Array auf der Festplatte zu speichern und dann nur einzelne Teile des Arrays zu laden ? Und wie mach ich das ? ^^ oder soll ich dafür am besten ein eigenes Thema aufmachen
 
Ich habe ja selbst schon ein wenig mit Karten generieren rumgebastelt, allerdings recht einfache zweidimensionale...das sinnvollste wäre in dem Fall tatsächlich, das Ganze aufzuteilen und zwischenzuspeichern. Da gbt es aber auch wieder Dutzende Möglichkeiten, die je nachdem, was du wie rechnest, mehr oder weniger sinnvoll sind.
Du könntest deine Welt z.B. in beliebig große Blöcke aufspalten und aneinander setzen lassen, dadurch könntest du dann beliebig erweitern. Für sowas sollte eine zweidimensionale ArrayList ausreichen, also z.B. ArrayList<ArrayList<WeltBlock>>
Ich weiß ja aus deiner beschreibung nichtmal, ob die Welt immer rechteckig sein oder eine beliebige Form haben kann und was alles darauf gespeichert werden sollte.
Aber zum Abspeichern kannst du entweder einen Block serialisieren und über einen ObjectStream abspeichern oder direkt die Byte-Arrays in eine Datei schreiben.
Eventuell kannman auch die einzelnen Höhen-Ebenen der Welt einzeln laden, aber ich weiß nicht wirklich, ob das viel sinnvoller ist.
Wenn du einen Ansatz und konkrete Fragen hast, kann man mir auch besser helfen. 😉
 

Zurück
Oben