tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
642
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    schneemensch schneemensch ist offline Rookie
    Registriert seit
    Jul 2007
    Beiträge
    5
    Hallo zusammen,

    ich bin zur Zeit dabei für meine OOP Vorlesung ein Tool zur Milchviehverwaltung (ja, kein Scherz ) zu schreiben.
    Die Viecher werden zu Beginn in unterschiedliche Vectoren eingelesen, dann vom Nutzer bearbeitet... und sollen am Ende auf die Festplatte geschrieben werden.
    Allerdings werden die Objekte nicht korrekt (oder zumindest nicht so wie ich mir das vorstelle) serialisiert.
    Nach ausgiebigem googeln und lesen der der Dokumentationen habe ich folgendes Testprogramm gebastelt um die Serialisierung mal ein bisschen zu testen:

    (Die Aufteilung in mehrere Klassen habe ich vorgenommen um die Architektur meines eigendlichen Programmes besser darzustellen)

    Class: MoohTest
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    
    import java.util.GregorianCalendar;
    import java.util.Vector;
    import dataAccessLayer.*;
     
    public class MoohTest
    {
            
        @SuppressWarnings("unchecked")
        public static void main(String[] args)
        {
            Vector<String[]> v1=new Vector<String[]>();
            String[] data1 =new String[10];
            data1[5]="testeMich";
            v1.add(data1);
            DatenSpeichern.speichern(v1);
            v1.clear();
            v1 = DatenLesen.lesen("test.dat");
            if(data1[5].toString()==v1.firstElement()[5].toString())
            {
                System.out.println("passt");
            }
            else
            {
                System.out.println("passt nicht");
            }           
            //gegenversuch
            Vector<GregorianCalendar[]> v2=new Vector<GregorianCalendar[]>();
            GregorianCalendar[] data2 =new GregorianCalendar[10];
            data2[5]=new GregorianCalendar(2007,1,1);
            v2.add(data2);
            DatenSpeichern.speichern(v2);
            v2.clear();
            v2 = DatenLesen.lesen("test.dat");
            if(data2[5].getTime()==v2.firstElement()[5].getTime())
            {
                System.out.println("passt");
            }
            else
            {
                System.out.println("passt nicht");
            }
            //gegenversuch
            Vector<int[]> v3=new Vector<int[]>();
            int[] data3 =new int[10];
            data3[5]=47;
            v3.add(data3);
            DatenSpeichern.speichern(v3);
            v3.clear();
            v3 = DatenLesen.lesen("test.dat");
            if(data3[5]==v3.firstElement()[5])
            {
                System.out.println("passt");
            }
            else
            {
                System.out.println("passt nicht");
            }
        }
    }

    Class: DatenSpeichern
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    package dataAccessLayer;
     
    import java.io.*;
    import java.util.Vector;
     
    public class DatenSpeichern
    {
        public static void speichern(Vector data)
        {
            try
            {
                FileOutputStream datei = new FileOutputStream("test.dat");
                ObjectOutputStream speichern = new ObjectOutputStream(datei);
                speichern.writeObject(data);
            }
            catch(IOException e){}
        }
    }

    Class: DatenLesen
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    package dataAccessLayer;
     
    import java.io.*;
     
    import java.util.Vector;
     
    public class DatenLesen
    {
        @SuppressWarnings("unchecked")
        public static Vector lesen(String dateiName) 
        {
            try
            {
                FileInputStream datei=new FileInputStream(dateiName);
                ObjectInputStream lesen = new ObjectInputStream(datei);
                Vector giveback = (Vector)lesen.readObject();
                return giveback;
            }
            catch(ClassNotFoundException e){System.out.println("fehler beim Lesen");return new Vector();}
            catch(FileNotFoundException e){System.out.println("fehler beim Lesen");return new Vector();}
            catch(IOException e){System.out.println("fehler beim Lesen");return new Vector();}
        }
    }

    Das ganze Liefert als Ausgabe:

    passt nicht
    passt nicht
    passt

    Es hat also nur die Serialisierung des Integer-Arrays geklappt.
    Ist es mit Java nicht möglich komplexere Objekte zu serialisieren oder steckt in dem Ganzen ein denkfehler?
     

  2. #2
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Strings müssen in java mit equals überprüft werden und nicht mit ==. Strings sind Objekte und == prüft nur ob das Objekt dasselbe ist, nicht jedoch den Inhalt. Dies macht man mit equals.

    Also probiers mal
    Code java:
    1
    
    if(data1[5].equals(v1.firstElement()[5]))

    Das toString() war ebenfalls überflüssig denn es sind schon Strings die du bekommst.
     

  3. #3
    schneemensch schneemensch ist offline Rookie
    Registriert seit
    Jul 2007
    Beiträge
    5
    Hallo zeja,

    stimmt, da hatte ich wohl Tomaten auf den Augen

    ich werde das mal in mein eingendliches Programm übertragen und dann nochmal rückmeldung geben, ob es daran lag oder ob das Problem weiter besteht.

    Danke für die schnelle Antwort.

    Schneemensch
     

  4. #4
    dontschew dontschew ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Ort
    Suhl/Thüringen
    Beiträge
    161
    und des weiteren:

    Ich bin mir zwar nicht sicher aber ich kann mir nicht vorstellen das java.util.GregorianCalendar serialisierbar ist.

    Falls doch interessiert mich das auch
     

  5. #5
    schneemensch schneemensch ist offline Rookie
    Registriert seit
    Jul 2007
    Beiträge
    5
    Hallo zusammen,

    ich hab mein Problem jetzt gelöst...
    die oberste Klasse der Vererbungshierarchie hatte Serializable nicht implementiert

    aber ich habe so rausbekommen, dass GregorianCalendar serialisiert werden kann.
    Danke für eure Hilfe.

    Schneemensch
     

  6. #6
    dontschew dontschew ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Ort
    Suhl/Thüringen
    Beiträge
    161
    Danke für die Rückmeldung
     

Ähnliche Themen

  1. Antworten: 17
    Letzter Beitrag: 11.05.09, 20:21
  2. Problem beim Serialisieren
    Von d4ex im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 07.03.08, 14:17
  3. JSTL: forEach mit komplexen Objekten
    Von mschlegel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 15.02.08, 14:21
  4. Schatten von komplexen Objekten
    Von eggrafx im Forum Photoshop
    Antworten: 9
    Letzter Beitrag: 21.06.07, 17:31
  5. Serialisieren von Objekten
    Von bl4ck29 im Forum Java
    Antworten: 5
    Letzter Beitrag: 14.05.05, 19:21