Daten speichern und lesen
Felix
- java
Hallo Programmiergemeinde,
ich hab mal wieder ein Problem mit Java.
Und zwar habe ich ein Tool programmiert, welche die Zeiten von Aktionen sammelt und speichert.
Nun möchte ich aber ein externes Tool schreiben, welche die Daten auswertet.
Mein Problem ist, das er die mir serialisierten die Objekte nich wieder einliest. Bekomm ich immer ClassCastException oder sowas.
Die Klasse in Programm1 ist nahezu identisch mit der Klasse aus Programm2.
Warum liest er mir die Daten nicht ein?
Kann mir jemand vielleicht eine Alternative vorschlagen? Mir gehen nämlich so langsam die Ideen aus.
Dank Euch, bis später
Felix
Hallo,
Die Klasse in Programm1 ist nahezu identisch mit der Klasse aus Programm2.
Nahezu identisch reicht halt nicht. Identisch müssen sie sein. Am besten
noch dieselbe class-Datei.
Kann mir jemand vielleicht eine Alternative vorschlagen? Mir gehen nämlich so langsam die Ideen aus.
Entweder dieselben Klassen beim Deserialisieren verwenden, wie sie auch
beim Serialisieren verwendet wurden oder die Objekte in ein allgemeines
Format (z.B. als XML) speichern und daraus wieder laden.
Gruß
Slyh
Nahezu identisch reicht halt nicht. Identisch müssen sie sein. Am besten noch dieselbe class-Datei.
Also ich habe die Attribute, welche serialisiert werden genauso auch in der Klasse im Programm genannt bzw. das Attribute, welche ich nicht braucht mit Hilfe von transient ausgeblendet.
zB.:
class 1(){
int att1 = 12;
int att2 = 10;
String name = "Test";
transient int count = 0;
}
class 2(){
int att1;
int att2;
String name;
}
Verstehtst Du was ich mein? Daher "nahezu gleich"! An der Struktur hat sich ja nichts geändert und das count wird doch garnicht mit gespeichert. Daher sollte das doch so funktionieren. Oder hab ich hier einen Denkfehler drin?
Kann mir jemand von Euch erklären, was es mit der
serialVersionUID = 1516643373440048786
auf sich hat?
Ich bekomme immer die gleiche Fehlermeldung ausgespuckt:
java.io.InvalidClassException: ResultObject;
local class incompatible:
stream classdesc serialVersionUID = 1516643373440048786,
local class serialVersionUID = 7620246312485059104
Da tun sich große Fragezeichen bei mir auf!!
Hallo,
Kann mir jemand von Euch erklären, was es mit der
serialVersionUID = 1516643373440048786
auf sich hat?
Das kann dir das Javabuch erklären.
Wenn ich das richtig verstehe, könntest du mit deinem Vorhaben wirklich
Erfolg haben, wenn du für die beiden involvierten Klassen die gleiche
SerialVersionUID verwendest.
Auf die Schnelle sehe ich keinen Grund nicht zwei unterschiedliche Klassen
für die Serialisierung und die Deserialisierung zu verwenden, solange
die zur Deserialisierung verwendet Klasse nur mindestens auch die gleichen
Instanzvariablen besitzt, also ein vollständiges Zurückschreiben
möglich ist. Insofern mag ich bis auf weiteres meine vorherige Aussage
revidieren.
Wenn du die SerialVersionUID von Hand setzt, sollte es meiner Meinung
nach also funktionieren.
Gruß
Slyh