Speichern und Laden von Objekten
Wer schon bisschen länger programmiert, kommt sicher bald an ein Problem: ein Objekt soll gespeichert werden, um irgendwann wieder geladen und in den gespeicherten Zustand versetzt zu werden. Am ehesten taucht diese Aufgabe bei der Spieleprogrammierung auf. Schließlich will kein Gamer jedes Mal vom Neuen anfangen oder das Spiel und somit den PC ständig laufen lassen.
Java begegnet diesem Problem mit zwei mächtigen Mechanismen - die da wären:
Seriealisierung
Reflektion
In diesem Tutorial möchte ich euch beide Mechanismen darstellen und mit einem Vergleich enden.
Speichermedium
Generell gibt es 4 verschiedene Medien, worin man ein Objekt speichern kann.
Bei den ersten 3 werden die zu speichernden Daten aus dem Objekt ausgelesen und entsprechend in eine Datenbank oder eine Datei gespeichert. Beim Laden werden die Daten über einen entsprechenden Konstuktor oder setter-Methoden wieder in das Objekt geladen.
Bei der 4. Möglichkeit speichert man den Speicherinhalt des Objekts aus dem Arbeitsspeicher auf die Festplatte. Beim Laden werden die Daten wieder ins RAM geladen und man könnte meinen, das Objekt war niemals abwesend. Man kennt es zum Beispiel vom Ruhezustand bei Windows.
Welchen Weg man auch wählt, eins muss sicher gestellt werden: die Daten müssen vor Manipulation geschützt werden (etwa durch Verschlüsselung oder Checksummen) und vor dem Laden auf Gültigkeit geprüft werden.
Werden bspw. die Binärdaten verändert, so kann es zu einem gravierenden Fehler oder Programmabsturz führen, wenn man daraus wieder ein Objekt erzeugt und damit weiterarbeitet.
Im folgenden werde ich der Einfachheit halber die Daten in eine Text- bzw. bei der Serialisierung in eine Binärdatei schreiben. Auf den Datenschutz verzichte ich. Ein Tutorial zum Verschlüsseln einer Datei lässt sich sicherlich finden. Ansonsten lege ich jedem Java - Mehr als eine Insel als weiterführende Literatur ans Herz. Damit sind wir auch schon beim ersten Mechanismus.
Wer schon bisschen länger programmiert, kommt sicher bald an ein Problem: ein Objekt soll gespeichert werden, um irgendwann wieder geladen und in den gespeicherten Zustand versetzt zu werden. Am ehesten taucht diese Aufgabe bei der Spieleprogrammierung auf. Schließlich will kein Gamer jedes Mal vom Neuen anfangen oder das Spiel und somit den PC ständig laufen lassen.
Java begegnet diesem Problem mit zwei mächtigen Mechanismen - die da wären:
Seriealisierung
Reflektion
In diesem Tutorial möchte ich euch beide Mechanismen darstellen und mit einem Vergleich enden.
Speichermedium
Generell gibt es 4 verschiedene Medien, worin man ein Objekt speichern kann.
- Datenbank
- XML-File
- Text-Dokument
- Binärdatei
Bei den ersten 3 werden die zu speichernden Daten aus dem Objekt ausgelesen und entsprechend in eine Datenbank oder eine Datei gespeichert. Beim Laden werden die Daten über einen entsprechenden Konstuktor oder setter-Methoden wieder in das Objekt geladen.
Bei der 4. Möglichkeit speichert man den Speicherinhalt des Objekts aus dem Arbeitsspeicher auf die Festplatte. Beim Laden werden die Daten wieder ins RAM geladen und man könnte meinen, das Objekt war niemals abwesend. Man kennt es zum Beispiel vom Ruhezustand bei Windows.
Welchen Weg man auch wählt, eins muss sicher gestellt werden: die Daten müssen vor Manipulation geschützt werden (etwa durch Verschlüsselung oder Checksummen) und vor dem Laden auf Gültigkeit geprüft werden.
Werden bspw. die Binärdaten verändert, so kann es zu einem gravierenden Fehler oder Programmabsturz führen, wenn man daraus wieder ein Objekt erzeugt und damit weiterarbeitet.
Im folgenden werde ich der Einfachheit halber die Daten in eine Text- bzw. bei der Serialisierung in eine Binärdatei schreiben. Auf den Datenschutz verzichte ich. Ein Tutorial zum Verschlüsseln einer Datei lässt sich sicherlich finden. Ansonsten lege ich jedem Java - Mehr als eine Insel als weiterführende Literatur ans Herz. Damit sind wir auch schon beim ersten Mechanismus.