Felix: Daten speichern und lesen

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

  1. 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

    1. 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?

  2. 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!!

    1. 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