Im Moment benutze ich das Serializalbe-Interface um meine Objekte in eine Datei zu schreiben. Jedes mal, wenn ich die Klasse verändere (z.B. eine Member-Variable zu der entsprechenden Klasse hinzufüge), können die DateN nicht mehr eingelesen werden und es wird eine Exception geworfen.
Früher oder später muss die Klasse aber an die neuen Gegebenheiten angepasst werden. Wäre es sinnvoll für diese selbst definierte Klasse eine eigene Save-Methode zu schreiben, die das Speichern bis auf die "elementaren" Datentypen bzw. Klassen, wie Integer runterbricht? Kommt es auch zu einer Serializable-Exception, wenn sich in der nächsten Java-Version etwas an der Integer-Klasse ändert?
(z.B. eine Member-Variable zu der entsprechenden Klasse hinzufüge), können die DateN nicht mehr eingelesen werden und es wird eine Exception geworfen.
zumindest das kannst du durch explizites hinzügen der version verhindern:
Java Code:
private static final long serialVersionUID = 1L;
Java Code:
private static final long serialVersionUID = 1L;
Java Code:
private static final long serialVersionUID = 1L;
ansonsten wird bei jeder kleinsten änderung ein neuer defaultwert von dieser variable gebildet und die klassen sind nicht mehr kompatibel.
neu hinzugekommende variablen werden einfach mit null initialisiert.
bei groben eingriffen wie entfernen oder typänderung werfen dann dennoch eine exception.
es gibt sicherlich noch möglichkeiten über selbst definierte writeObject und readObject methoden oder ähnliches aber ich bin leider kein experte auf dem gebiet - weiß nur dass es sehr schnell sehr kompliziert werden kann. und weiche persönlich lieber auf json oder xml aus.
ver hat Recht, readObject und writeObject sind der richtige Weg. Allerdings ist Serialization ein sprachexterner Mechanismus, mit dem man sehr vorsichtig umgehen muss (z.B. Singletons und invarianten von Objekten zerschiesst man sich mit serializable recht schnell).
Das gaengiste Pattern ist einen Serialization-Proxy zu verwenden.
@ver
Ich habe es jetzt mal mit Hinzufügen der Variable "serialVersionUID" versucht und es funktioniert super! Anstelle von "1L" habe ich den Long-Wert mit dem im JDK enthaltenen Programm "serialver" erittelt, weil ich schon serialisierte Objekte hatte. Es ist wirklich Gold wert! Nun, kann ich endlich kleine Änderungen an den Klassen durchführen ohne die Objekte wieder neu zu erzeugen! Wunderbar, genau was ich gesucht habe! Danke!
@dineki89: Wenn ich an die Grenzen der oben genannten Variante stoße, werde ich mich auch noch mit den Proxys beschäftigen! Danke, schonmal für die Wegweisung!
MfG
WilMen
Zuletzt bearbeitet von WilMen am 21:48:44 18.08.2010, insgesamt 1-mal bearbeitet
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.