ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
642
642
EMPFEHLEN
-
25.07.07 15:13 #1
- 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?
-
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.
-
25.07.07 16:49 #3
- 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
-
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
-
25.07.07 21:01 #5
- 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
-
Danke für die Rückmeldung
Ähnliche Themen
-
Problem beim Serialisieren von Java Klassen
Von AvS im Forum JavaAntworten: 17Letzter Beitrag: 11.05.09, 20:21 -
Problem beim Serialisieren
Von d4ex im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 07.03.08, 14:17 -
JSTL: forEach mit komplexen Objekten
Von mschlegel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 15.02.08, 14:21 -
Schatten von komplexen Objekten
Von eggrafx im Forum PhotoshopAntworten: 9Letzter Beitrag: 21.06.07, 17:31 -
Serialisieren von Objekten
Von bl4ck29 im Forum JavaAntworten: 5Letzter Beitrag: 14.05.05, 19:21





Zitieren

Login





