ObjectOutputStream

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

ich arbeite gerade an einem Programm, dass Objekte mittels ObjectOutputStream in Dateien sichert.
Jetzt scheint es aber so zu sein, dass jedesmal wenn ich die Klasse ändere, die gesicherten Daten unbrauchbar weil nicht mehr einlesbar sind.

Ich habe daran gedacht, diesen Missstand zu umgehen, indem ich verschiedene Versionen der Klassen anfertige und die Version mitabspeichere, um danach die richtige Klassenversion zu laden.


Fällt jemandem eine bessere Lösung ein?
 

@x.l

Bekanntes Mitglied
Frage: Benötigst denn wirklich das konkrete Objekt oder reicht auch ein Objekt, welches die gleichen Werte hat?

So könntest du beim sichern nur die Werte rausschreiben und beim wiederherstellen, erzeugst du dir ein neues Objekt und belegst alle Variablen mit den gesicherten Werten.
 
G

Guest

Gast
Wenn du selber einen UID (longWert) der Klasse mitgibst, dann bist Du selber verantwortlich was du in der Klasse änders, aber das Einlesen funkt, dann immer,
wenn du keine eigene UID mitgibst, dann wird eine berechnet für diese Klasse und wenn Du dann was änderst, dann stimmt das nicht mehr überein,
 
G

Guest

Gast
Ich brauch das konkrete Objekt, da diese mitunter so komplex und verschachtelt sind, das ein stückweises schreiben und einlesen viel zu umständlich wäre.

Wie funktioniert das mit der UID, also das ich die selber mitschreibe um die Klassen verändern zu können?
 

mikachu

Top Contributor
hast du bei den objekten, die gesichert werden sollen, das interface Serializable ausimplementiert?

...ist nur eine idee, da ich selber noch nie sowas gemacht habe. ich habe die nur über das netzwerk an die clients in meinem jConference genutzt, jedoch werden diese nicht in dateien abgelegt ;-)
 

mikachu

Top Contributor
Code:
public static final long serialVersionUID = 42L;
im eclipse kann man sich auch eine generieren lassen.
 
G

Guest

Gast
Und wenn ich die ins Objekt aufnehme gehts?

Oder was genau muss ich mit der dann machen?
 

mikachu

Top Contributor
die musst du in die klasse der objekte, die du über den objectoutputstream arbeiten lassen willst, einbauen.
 
G

Guest

Gast
achso, also diese VersionID quasi jedesmal wenn ich sie ändere erhöhen zum Beispiel, richtig?
 

mikachu

Top Contributor
also ich hab diese ID niemals angefasst... lass die doch einfach so und gib ein extra attribut "version" oder so.
 

Soi

Mitglied
Das versteh ich nicht, selbst wenn die VersionsID im gespeicherten Object steht, wie soll das dann nach einer Veränderung der Hauptklasse noch deserialisiert werden?

Wozu dient die ID eigentlich?
 
G

Guest

Gast
Jep, perfekter gehts nicht. Genau das was ich gesucht hab.

Nochmal vielen Dank an mikachu =)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben