Serialisierungsproblem

Dieses Thema Serialisierungsproblem im Forum "Allgemeine Java-Themen" wurde erstellt von Kababär, 13. Dez. 2016.

Thema: Serialisierungsproblem Hi, mir fällt da gerade etwas ein wegen dem Serialisieren, als ich mein Programm etwas erweitert habe.. und zwar:...

  1. Hi,

    mir fällt da gerade etwas ein wegen dem Serialisieren, als ich mein Programm etwas erweitert habe.. und zwar:
    Derzeit serialisiere ich das Objekt "Modul". Eine Liste von Modulen wird beim Programmstart deserialisiert und in einer TableView angezeigt. Jetzt habe ich allerdings noch ein weiteres Attribut dem Objekt Modul hinzugefügt und somit lässt es sich nicht mehr deserialisieren.
    Heißt ich müsste ja jetzt das serialisierte Objekt auf der Festplatte löschen (?), aber dann wären ja die Daten weg. Weniger problematisch ist es bei meiner Konfig-Datei, da, falls es Probleme gibt diese zu laden, einfach eine "Default-Konfig-Datei" mit Standardwerten erstellt wird.

    Wie kann ich also diese Daten "retten" falls ich mal auf die Idee komme: "Hey, das Attribut wäre auch nicht verkehrt!"?

    Modul implementiert "Externalizable" und readExternal bzw writeExternal wurden überschrieben (einfach getter/setter in den ObjectInput/ObjectOutput gesetzt).

    Jemand eine Idee?
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Das geaenderte Object ist nicht mehr kompatibel mit der vorherigen Version, weil die Versionsnummer eine andere ist. Ausser du hast eine angegeben:

    private static final long serialVersionUID = 84356L;

    Wenn dieses Feld fehlt, generiert Java eine Versiosnnummer einfach aus dem Quellcode. Wenn sich der aendert, ist auch die Nummer eine andere und die Objekte sind nicht mehr kompatibel.

    Es gibt aber auch andere Moeglichkeiten, Daten zu serialisieren, z.B. JAXB, JSON oder JABB (https://github.com/a-genius/jabb). Letzteres habe ich fuer ein Projekt geschrieben, wo staendige Aenderungen der Objekte normal sind und genau dein Problem auftrat.

    Andy
     
  4. Die UID bleibt die gleiche, allerdings sagt er, dass die Versionen nicht übereinstimmen..
    JAXB habe ich schon implementiert (als Notlösung, man muss vorher erst das XML exportieren).

    Dazu hatte ich auch die Idee noch JSON zu verwenden, aber bin da noch totaler Neuling.
    Das Schreiben klappt aber soweit. Ich packe dazu alle Module in ein JSONArray und schreibe das dann.
    Nur die Formatierung kriege ich nicht so hin, alles steht in einer Zeile in der Datei.
    (Aber das ist nicht tragisch soweit der Code funktioniert :D)
     
  5. Poste doch mal deine Klasse.
     
  6. Da fehlt einfach noch ein pretty print
    Code (Java):

    System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object));
     
  7. Ja das habe ich auch schon gemerkt mittlerweile! Dieses json, gson, jackson hat mich ganz schön verwirrt.
     
  8. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!