Hallo zusammen,
für eine Übung soll ich ein Adressbuch schreiben. Dabei soll ich eine Klasse Adresse benutzen welches Serializable implementiert. Außerdem soll die Klasse die Methoden "public static void schreiben (Adresse [] adr)" und "public static void lesen (Adresse [] adr)" besitzen. Für diese Methoden benutze ich den ObjectInput - bzw. ObjectOutputStream.
Ich hab das jetzt so gehandhabt, dass in der Klasse Adressbuch die Adressen erzeugt werden und dann die Methode schreiben und danach lesen aufgerufen wird. Das Funktioniert soweit auch.
Das Problem ist aber, dass es für ein Adressbuch natürlich sinnvoll wäre wenn man Adressen hinzufügen könnte und das Funktioniert bei mir nicht.
Jedes mal wenn ich das Programm starte und über einen Scanner Adressen hinzufüge wird die "adressen.ser" Datei zwar länger und wenn man genau hinschaut sieht man auch die neuen Straßennamen, im Programm selber werden aber immer nur die Adressen angezeigt die man beim ersten Programmstart eingefügt hat (also beim allerersten Start, dann wenn die .ser Datei angelegt wird). Das ganze habe ich dann zusätzlich noch mit einer ArrayList probiert aber hier verhält sich das Programm gleich. Soweit zu meinem Problem.
Nun meine Frage:
Ich schätze ich habe ein Verständnisproblem wie genau ObjectInputStream und ObjectOutputStream funktionieren. Ich meine, dass der ObjectOutputStream das Object (also das AdressenArray) liest und in Bytes umwandelt. Diese Bytes schreibt er dann in die .ser Datei. Der ObjectInputStream liest dann diese .ser Datei und wandelt die Bytes wieder in ein Object um. Dieses Object kann dann wieder ganz normal behandelt werden. Meine Vermutung ist, dass mit jedem Programmstart ein neues Object in die .ser Datei geschrieben wird aber er immer nur ein Object liest und zwar das erste. Ist das soweit Richtig? Wenn ja, müsste ich dann die Objecte miteinander verknüpfen, sodass diese wieder nur ein einziges Object sind? Geht das? Und wenn ja wie? Wenn nein, wie sollte ich nun weiter vorgehen? Ist es möglich die Objecte nacheinander auszulesen?
Ich hab schon viel gegooglet aber bis jetzt noch keine Antwort auf meine Fragen gefunden. Wäre nett wenn mir jemand weiterhelfen könnte.
Ganz schön viel Text, tut mir Leid aber ich hoffe man versteht worin mein Problem liegt.
für eine Übung soll ich ein Adressbuch schreiben. Dabei soll ich eine Klasse Adresse benutzen welches Serializable implementiert. Außerdem soll die Klasse die Methoden "public static void schreiben (Adresse [] adr)" und "public static void lesen (Adresse [] adr)" besitzen. Für diese Methoden benutze ich den ObjectInput - bzw. ObjectOutputStream.
Ich hab das jetzt so gehandhabt, dass in der Klasse Adressbuch die Adressen erzeugt werden und dann die Methode schreiben und danach lesen aufgerufen wird. Das Funktioniert soweit auch.
Das Problem ist aber, dass es für ein Adressbuch natürlich sinnvoll wäre wenn man Adressen hinzufügen könnte und das Funktioniert bei mir nicht.
Jedes mal wenn ich das Programm starte und über einen Scanner Adressen hinzufüge wird die "adressen.ser" Datei zwar länger und wenn man genau hinschaut sieht man auch die neuen Straßennamen, im Programm selber werden aber immer nur die Adressen angezeigt die man beim ersten Programmstart eingefügt hat (also beim allerersten Start, dann wenn die .ser Datei angelegt wird). Das ganze habe ich dann zusätzlich noch mit einer ArrayList probiert aber hier verhält sich das Programm gleich. Soweit zu meinem Problem.
Nun meine Frage:
Ich schätze ich habe ein Verständnisproblem wie genau ObjectInputStream und ObjectOutputStream funktionieren. Ich meine, dass der ObjectOutputStream das Object (also das AdressenArray) liest und in Bytes umwandelt. Diese Bytes schreibt er dann in die .ser Datei. Der ObjectInputStream liest dann diese .ser Datei und wandelt die Bytes wieder in ein Object um. Dieses Object kann dann wieder ganz normal behandelt werden. Meine Vermutung ist, dass mit jedem Programmstart ein neues Object in die .ser Datei geschrieben wird aber er immer nur ein Object liest und zwar das erste. Ist das soweit Richtig? Wenn ja, müsste ich dann die Objecte miteinander verknüpfen, sodass diese wieder nur ein einziges Object sind? Geht das? Und wenn ja wie? Wenn nein, wie sollte ich nun weiter vorgehen? Ist es möglich die Objecte nacheinander auszulesen?
Ich hab schon viel gegooglet aber bis jetzt noch keine Antwort auf meine Fragen gefunden. Wäre nett wenn mir jemand weiterhelfen könnte.
Ganz schön viel Text, tut mir Leid aber ich hoffe man versteht worin mein Problem liegt.