Deserialisieren mit anderem Klassennamen

Status
Nicht offen für weitere Antworten.

s-markus

Mitglied
Hallo!

ich habe schon vor längerer Zeit eine ganze Menge Daten serialisiert und immer mal wieder deserialisiert.
Jetzt möchte ich die Prozedur auf einem JavaServer (MyJavaServer.com) ausführen.
Damit verbunden ist, dass ich alle meine Klassen in ein extra package legen muss.
Was ist jetzt das Problem?
Da sich das Package der Klasse des serialisierten Objektes ändert, ändert sich auch der Klassenname
und ich kriege logischer Weise eine Exception beim deserialiesieren.
habe auch schon versucht mit einem Editor den Klassenname in der Datei in dem das Objekt gespeichert ist manuell zu ändern. => Bringt aber nichts (java.io.UTFDataFormatException).
(Es sind viele Daten ...)

Danke für jede Idee!

Viele Grüße,

Markus
 

Wildcard

Top Contributor
hmmm
Das wird nicht gehen. Serialisierung ist eben nicht sehr flexibel.
Kannst du nicht lokal ein kleines Prog starten das deine alten Daten deserialisiert, auf die neuen Klassen überträgt und wieder serialisiert?
 

s-markus

Mitglied
Wildcard hat gesagt.:
Kannst du nicht lokal ein kleines Prog starten das deine alten Daten deserialisiert, auf die neuen Klassen überträgt und wieder serialisiert?
Ja, das is ne Idee. Allerdings würde ich das erst machen wenns wirklich nicht anders geht.
Die Daten sind wirklich sehr blöd übertragbar. Ich hab da einen riesigen gerichteten Graphen serialisiert. Da sind auch noch ein paar Unterklassen die ich selbst geschrieben habe. Wird glaub ich ein etwas größers Projekt.
Irgendwo habe ich gelesen, dass der Klassenname ASCI-Codiert mit in die Datei geschrieben wird. Stimmt auch.
Vielleicht habe ich die ganze Sache nur mit dem falschen Editor (nano) gemacht? Ich werde mal ein paar HEX-Editoren durchprobieren.

Danke erstmal.

Viele Grüße,

Markus
 

Wildcard

Top Contributor
Ist möglich das du damit Erfolg hast, viel Glück dafür.
Achte aber darauf das die Serial Version ID noch identisch ist.
Sag mal bescheid was draus geworden ist.
Für die Zukunft:
Serialisierung ist keine geeignete Nutzdatenpersistierung.
 

s-markus

Mitglied
Ich habe erst noch etwas mit HEX-Editoren rumexperimentiert.
Bin damit aber nicht glücklich geworden. Ich denke aber es könnte
so irgendwie gehen. Bin mir wiederrum aber nicht sicher, weil es ja sein kann,
dass noch an anderen Stellen der Klassenname nicht-ASCI-codiert verwendet wird.

Zwischendurch bin ich auf eine andere Idee gekommen:
Habe das Object ob das ich hatte in einen XML-String umgewandelt und den alten Package-Namen "common" darin durch "mreuthe1.common" ersetzt:
Code:
import com.thoughtworks.xstream.XStream;
...
XStream xstream = new XStream();
		String xml = xstream.toXML(ob);
		xml = xml.replaceAll("common", "mreuthe1.common");
(XStream: http://xstream.codehaus.org/download.html )
Dann habe ich den String xml in eine Datei geschrieben. Entspricht bis hier hin
dem normalen Serialisieren.

Dann habe ich die entsprechenden Klassen aus dem package "common" in "mreuthe1.common" verschoben und die Datei wieder "xml-deserialisiert":

Code:
StringBuffer xml = ... ; //aus der XML-Datei ausgelesen

XStream xstream = new XStream();
ob = xstream.fromXML(xml.toString());

Nach dem Cast von ob in meinen gerichteten Graphen war ich sehr glücklich, da alles funktioniert hat!

Trotz dieser schlechten Erfahrung mit der gewöhnlichen Serialisierung muss ich gestehen, dass ich sie doch wieder verwende, weil:
1. einfach
2. Serialisierung von Sun ergab eine Datei-Größe von 100 kB, mit xml: 1,4 MB
(allerdings habe ich noch die xml-Datei mit tar testweise gezipt und bin auch auf 120 kB gekommen)


Ich möchte aber drauf hinweisen, dass es sich um eine eher abendteuerliche Methode handelt, da mit
Code:
xml.replaceAll("common", "mreuthe1.common");
alle Strings ersetzt werden, nich nur die die den Package-Namen bezeichnen.

Viele Grüße,

Markus
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Gson deserialisieren mit PropertyChangeSupport Allgemeine Java-Themen 4
C Deserialisieren von unterschiedlichen Klasseninstanzen Allgemeine Java-Themen 13
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
F Schlüsselworte Einstellungen dynamisch deserialisieren Allgemeine Java-Themen 5
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
A Problem beim serialisieren/deserialisieren einer ArrayList Allgemeine Java-Themen 3
G Direkt in ein Objekt deserialisieren Allgemeine Java-Themen 5
B Nach Deserialisieren: Elemente des JFrames ohne Funktion Allgemeine Java-Themen 5
P Servlet, Deserialisieren, StreamCorruptedException Allgemeine Java-Themen 9
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
Thallius Serialisiertes File kann auf anderem Rechner nicht geladen werden Allgemeine Java-Themen 12
C Datentypen Enum-Werte Bestanteil von anderem Enum Allgemeine Java-Themen 8
C Umgebungsvariable Java-Datei in anderem Verzeichnis ausführen Allgemeine Java-Themen 2
J Anderem Thread Variable mitgeben Allgemeine Java-Themen 2
A Nach Benutzerwechsel mit anderem Account in Windows anmelden Allgemeine Java-Themen 8
S Prozess der von anderem Prozess gestartet wurde beenden? (Windows Bildschirmtastatur) Allgemeine Java-Themen 4
T Externes Programm auf anderem Bildschirm starten Allgemeine Java-Themen 3
T Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 13
J Eclipse Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 14
I EDT scheint zu blocken wegen Dateioperation in anderem Thread Allgemeine Java-Themen 9
Z Mit ActionListener in anderem Frame lauschen? Allgemeine Java-Themen 3
M Log4J funktioniert nicht unter anderem Benutzer Allgemeine Java-Themen 5
R GPL code mixen mit anderem Code? Allgemeine Java-Themen 7
V Class Mapping - Klasse unter anderem Namen verfügbar machen Allgemeine Java-Themen 8
S jar-datei auf anderem Rechner nicht ausführbar. Allgemeine Java-Themen 40
conan2 BufferedReader.readLine() von anderem Thread aus beenden Allgemeine Java-Themen 4
J Einbinden einer protected-Methode aus anderem Package Allgemeine Java-Themen 2
G Java Programm auf anderem Pc ausführen Allgemeine Java-Themen 4
H .java Dateien in anderem Package Allgemeine Java-Themen 8
H jar-file in anderem main programm ausführen Allgemeine Java-Themen 2
G Link zu JCreator oder anderem Tool Allgemeine Java-Themen 2
SaschaMeyer Erlaubte Klassennamen Allgemeine Java-Themen 1
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
E Klassennamen in Deutsch oder Englisch? Allgemeine Java-Themen 5
D Laaaange Klassennamen und Package-Pfade. Allgemeine Java-Themen 5
S Klassennamen Allgemeine Java-Themen 11
J einen passenden Klassennamen finden... Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben