LinkedList serialisieren?

Status
Nicht offen für weitere Antworten.

che

Bekanntes Mitglied
Hallo!

Ist es möglich eine LinkedList zu serialisieren? Nlw. sollte das doch möglich sein, da ich von der LinkedList ein Objekt anlege und ich dieses auch serialisieren kann. Ich habe es versucht, aber ich bekomme die Fehlermeldung java.io.NotSerializableException...

Grüsse, Che
 
B

Beni

Gast
Die Liste zu serialisieren ist sicher möglich (auch wenn ichs noch nie ausprobiert habe), immerhin implementiert sie ja extra das "Serializable"-Interface.

Aber was ist mit den Elementen, die in der Liste drinstehen? Die werden auch serialisiert, und müssen deshalb serialisierbar sein... (was steht denn bei dir in der Liste?)
 

che

Bekanntes Mitglied
Ich habe auch bei jeder Klasse, dessen Objekte in die Liste eingefügt werden und somit auch serialisiert werden, "implements Serializable" geschrieben. Trotzdem kommt die Fehlermeldung. Hier ist meine Personenverwaltungsklasse, wo die Personen serialisiert werden sollen.

Code:
import java.util.LinkedList;
import java.util.ListIterator;
import java.io.*;
public class Personenverwaltung implements Serializable
{
	LinkedList verw=new LinkedList();
	ListIterator it = verw.listIterator();
	
	Personenverwaltung() throws Exception {
	}
	
	public void addPerson(Person person) throws Exception {
		verw.addLast(person);
	}
	
	public void speicherePersonen(Personenverwaltung verwaltung) throws FileNotFoundException, IOException {
		ObjectOutputStream objOut = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("test.ser"))); 
		objOut.writeObject(verwaltung); 
		objOut.close();
		verw.clear();
	}
	
	public void ladePersonen() throws FileNotFoundException, IOException, ClassNotFoundException {
		ObjectInputStream objIn = new ObjectInputStream(new BufferedInputStream(new FileInputStream("test.ser"))); 
		Personenverwaltung verw=(Personenverwaltung) objIn.readObject(); 
		objIn.close();
	}....

Dies ist eine Personenklasse unter vielen:

Code:
import java.io.Serializable;
public class Professor
extends Person implements Serializable
{
   private String Fachbereich;
   private String Fachgruppe;
   private String Personalnummer;
   private String Personennummer;
   private Personenverwaltung personenverwaltung;
   
   public Professor(String name, String vorname, String Personennummer, String fachbereich, String fachgruppe, String personalnummer) {
	   setFachbereich(fachbereich);
	   setFachgruppe(fachgruppe);
	   setPersonalnummer(personalnummer);
	   setPersonennummer(Personennummer);
	   setName(name);
	   setVorname(vorname);   
   }
   
   public String getFachbereich()
   {
      return this.Fachbereich;
   }...

und hier ist die main()-Methode:

Code:
import java.io.*;
public class Start {
	
	InputStreamReader isr = new InputStreamReader(System.in);
	BufferedReader stdin = new BufferedReader(isr);
	
	Personenverwaltung verw=new Personenverwaltung();
	
	Start() throws Exception {
		mainmenu();	
	}
	
	public void mainmenu() throws Exception
	{
		System.out.println("Willkommen beim Personenverwaltungssystem\n");
		System.out.println("Bitte wählen Sie eine Funktion aus:\n");
		System.out.println("(1) neue Person anlegen");
		System.out.println("(2) bestehende Person löschen");
		System.out.println("(3) Personen auflisten");
		System.out.println("(4) Person suchen");
		System.out.println("(5) System beenden");
		System.out.println("\nNummer eingeben:");
		
		String mainNummer=stdin.readLine();
		int befehl=Integer.parseInt(mainNummer);
		
		switch(befehl)
		{
		case 1: addPersonMenu(); break;
		case 2: deletePer(); break;
		case 3: viewPer(); break;
		case 4: searchPer(); break;
		case 5: shutDown(); break;
		default: System.out.println("Auswahl existiert nicht!\nBitte erneut versuchen\n\n\n"); mainmenu(); break;
		}
	}
	
	public void viewPer() throws Exception {
		System.out.println("---------------------------------------------");
		System.out.println("Personen anzeigen");
		System.out.println("---------------------------------------------");
		verw.viewPerson();
		System.out.println("Sie werden zum Hauptmenü weitergeleitet.\n\n");
		mainmenu();
		
	}
	
	/*public void deletePer() throws Exception
	{
		System.out.println("---------------------------------------------");
		System.out.println("Bestehende Person löschen");
		System.out.println("---------------------------------------------");
		System.out.println("\nName eingeben:");
		String Name=stdin.readLine();
		System.out.println("Vorname eingeben:");
		String Vorname=stdin.readLine();
		verw.removePerson(Name,Vorname);
		System.out.println("Möchten Sie eine weitere Person löschen? (y/n)");
		String antwort=stdin.readLine();
		
		if(antwort.equals("y")) {
			deletePer();
		}
		else if(antwort.equals("n")) {
			System.out.println("Sie werden zum Hauptmenü weitergeleitet.\n\n");
			mainmenu();
		}
		else {
			System.out.println("Ihr Eingabe ist nicht korrekt! Bitte erneut versuchen");
			}
	} */ 
	
	public void shutDown() throws FileNotFoundException, IOException
	{
		System.out.println("---------------------------------------------");
		System.out.println("System beenden");
		System.out.println("---------------------------------------------");
		verw.speicherePersonen(verw);
		System.out.println("Daten werden gespeichert...\nProgramm wird beendet");
	}
	...

Die Methode shutDown() soll das Programm beenden bzw. die Daten serialisieren.
 
B

bygones

Gast
der ListIterator ist nicht serialisierbar, was auch unlogisch wäre... warum speicherst du ihn überhaupt in der verwaltung ?

noch was zur Programmlogik:

warum speichert ein Professor nochmals eine Instanz von Personalverwaltung... das führt zu einer verkettung. Personalverwaltung hält Instanzen von Personen, die wiederum eine Instanz der Personalverwaltung habe.... das wird dir die serialisierung um die Ohren hauen !
 

SebiB90

Top Contributor
deathbyaclown hat gesagt.:
warum speichert ein Professor nochmals eine Instanz von Personalverwaltung... das führt zu einer verkettung. Personalverwaltung hält Instanzen von Personen, die wiederum eine Instanz der Personalverwaltung habe.... das wird dir die serialisierung um die Ohren hauen !
ne wird es nicht, da es ein object nur einmal gibt und dann nur die adresse zum object immer angegeben wird. also sowas wie ne endlosschleife wird das nicht.

aber beim laden machst du was komisches. du lädst aus der datei die personenverwaltung in die variable verz, einer lokalen variable und dann machst du nix weiter mit dieser variable, dann is klar das du die einträge hinter nicht mehr hast.
 

che

Bekanntes Mitglied
aber beim laden machst du was komisches. du lädst aus der datei die personenverwaltung in die variable verz, einer lokalen variable und dann machst du nix weiter mit dieser variable, dann is klar das du die einträge hinter nicht mehr hast.

Du hast recht, hatte die Klassen in Fujaba falsch assoziiert. Habe das nun entfernt. Dennoch ist das Problem nach wie vor vorhanden. Ich kann mich an früher erinnern, dass ich die LinkedList serialisieren konnte, aber kann mich an die Ausführung kaum noch erinnern. Geht das denn wirklich nicht?
 

SebiB90

Top Contributor
che hat gesagt.:
aber beim laden machst du was komisches. du lädst aus der datei die personenverwaltung in die variable verz, einer lokalen variable und dann machst du nix weiter mit dieser variable, dann is klar das du die einträge hinter nicht mehr hast.

Du hast recht, hatte die Klassen in Fujaba falsch assoziiert. Habe das nun entfernt. Dennoch ist das Problem nach wie vor vorhanden. Ich kann mich an früher erinnern, dass ich die LinkedList serialisieren konnte, aber kann mich an die Ausführung kaum noch erinnern. Geht das denn wirklich nicht?
wie lautet denn die ganze fehlermeldung?
 

che

Bekanntes Mitglied
Code:
Exception in thread "main" java.io.NotSerializableException: java.util.LinkedList$ListItr
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1304)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
	at Personenverwaltung.speicherePersonen(Personenverwaltung.java:18)
	at Start.shutDown(Start.java:78)
	at Start.mainmenu(Start.java:33)
	at Start.addPersonMenu(Start.java:114)
	at Start.addAdmin(Start.java:137)
	at Start.addPersonMenu(Start.java:111)
	at Start.mainmenu(Start.java:29)
	at Start.<init>(Start.java:10)
	at Start.main(Start.java:194)

Bitte schön.
 

che

Bekanntes Mitglied
Das habe ich schon! Manche wissen halt mehr als andere, deswegen habe ich diese Antwort ignoriert, in der Hoffnung, dass mir jemand sagt, wie ich das machen muss. Außerderm habe ich es schonmal geschafftt!
 
B

bygones

Gast
che hat gesagt.:
Das habe ich schon! Manche wissen halt mehr als andere, deswegen habe ich diese Antwort ignoriert, in der Hoffnung, dass mir jemand sagt, wie ich das machen muss. Außerderm habe ich es schonmal geschafftt!
mhm heißt das mein wissen reicht für die antwort nicht aus... mist - gleich nochmal bücher wälzen ...
 

che

Bekanntes Mitglied
mhm heißt das mein wissen reicht für die antwort nicht aus... mist - gleich nochmal bücher wälzen ...
Brauchst nicht gleich sarkastisch zu werden. Ich habe das nicht böse gemeint. Ich zweifel nicht an deine Erfahrungen und Können als Programmierer, ich wollte halt nur ein paar Meinungen dazu hören.

Nun gut, eine Frage habe ich noch. Wie schaffe ich es dann mehrere Objekte unterschiedlicher Klassen zu serialisieren? Ich habe mir gedacht, alles in einer Liste packen und die Liste serialisieren und damit hat sich die Geschichte. Ist doch nicht so einfach wie ich mir dachte. Habe ihr einen alternativen Vorschlag?
 
B

Beni

Gast
Ich glaube dbac meinte eher, du solltest noch ein paar Bücher lesen :wink:

Mein erster Vorschlag wäre da: "Wie lese ich Fehlermeldungen richtig"...

Ich weiss nicht, für was du den Iterator benötigst, aber vielleicht kannst du ihn einfach transient machen?

[Edit: achja, transient kannst du in einem Buch nachlesen, oder auch in der API :bae:]
 
B

bygones

Gast
che hatte schon recht - es war sarkastisch gemeint :) nicht allzuböse nehmen :wink:

du bleibst uns immer noch schuldig, warum du den iterator hältst ?

wegen mehrere Objekte speichern. ich würde nicht auf teufel komm raus alles in eine liste hauen, wenn die Objekte nichts miteinander zu tun haben.

Eine möglichkeit wäre, die Objekte nacheinandern zu serialisieren

Code:
oos.writeObject(liste);
oos.writeObject(anderesObject);
oos.writeObject(undNochWas);
 

che

Bekanntes Mitglied
Ich weiss nicht, für was du den Iterator benötigst, aber vielleicht kannst du ihn einfach transient machen?

Warum sollte der Iterator nicht persistent sein?

Den Iterator benötige ich um die Liste zu durchlaufen, da ich eine serchPerson(String Name) habe, die die Liste durchläuft und die passende Person mit den Namen findet.
 

che

Bekanntes Mitglied
Ok, tut mir echt leid Jungs. Habe den Wald vor lauter Bäumen nicht gesehen. Habe nun den Iterator für das Serialisieren gesperrt und nun klappt alles wunderbar! Danke für eure Tipps und die Geduld.
 
B

bygones

Gast
che hat gesagt.:
Warum sollte der Iterator nicht persistent sein?
Den Iterator benötige ich um die Liste zu durchlaufen, da ich eine serchPerson(String Name) habe, die die Liste durchläuft und die passende Person mit den Namen findet.
wenn du nur einen Iterator hast und immer auf diesem arbeitest wirst du nicht glücklich, da er immer auf der gefundenen Position bleibt, d.h. er resettet sich nicht und sucht somit nicht immer vom Anfang der Liste. D.h. z.b. ist er mal ans Ende gelangt kannst du gar nicht mehr suchen.

Beim ListIterator kannst du zwar wieder von hand den Iterator nach vorne bewegen, aber der Normalfall ist, dass für jede suche ein neuer Iterator erstellt wird. Der Iterator gibt ja nicht neue Informationen wieder, sondern gibt dir nur eine Möglichkeit die Liste zu durchlaufen.
 

Bleiglanz

Gesperrter Benutzer
Code:
public class Personenverwaltung implements Serializable
{
   LinkedList verw=new LinkedList();

   ListIterator it = verw.listIterator(); 
   // völliger unsinn das hier aufzurufen :-)
   
   Personenverwaltung() throws Exception {
   }
nochmal was fundamentales

ein Iterator hat keinerlei Lebensberechtigung ausserhalb der Iteration für die er eingesetzt wird; nach jeder Modifikation der Liste ausserhalb des Iterators wird er "ungültig"

du gewinnst NICHTS und machst dir das Leben nur schwerer wenn du ihn als Member-Variable speicherst

aber wenn du das unbedingt willst: schreib doch das Wörtchen "transient" davor
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A LinkedList implementieren Java Basics - Anfänger-Themen 32
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
Düsseldorf2002 Datentypen Verschachtelte LinkedList Java Basics - Anfänger-Themen 5
Düsseldorf2002 Datentypen Zwei dimensionale LinkedList Java Basics - Anfänger-Themen 8
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
G Java LinkedList Java Basics - Anfänger-Themen 6
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
S Mit einer LinkedList vorwärts und rückwärts iterieren Java Basics - Anfänger-Themen 6
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
G Java LinkedList Java Basics - Anfänger-Themen 3
B LinkedList add-Methode Java Basics - Anfänger-Themen 10
F Windows in LinkedList registrieren Java Basics - Anfänger-Themen 3
A Hilfe, LinkedList Java Basics - Anfänger-Themen 2
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
P Quellcode LinkedList Java Basics - Anfänger-Themen 2
F Collection Aufgabe mit LinkedList Java Basics - Anfänger-Themen 3
N Hilfe bei verknüpfter Liste - Linkedlist Java Basics - Anfänger-Themen 11
P Datentypen LinkedList: Kopie behält Referenz? Java Basics - Anfänger-Themen 3
C ArrayList vs LinkedList vs ? Java Basics - Anfänger-Themen 15
C LinkedList vs. ArrayList Java Basics - Anfänger-Themen 15
O LinkedList zu ArrayList Java Basics - Anfänger-Themen 4
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
L Problem mit LinkedList Java Basics - Anfänger-Themen 3
F In LinkedList einen Wert ersetzen oder neu einfügen Java Basics - Anfänger-Themen 7
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
TechGirl LinkedList - kurze allgemeine Frage Java Basics - Anfänger-Themen 17
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
S LinkedList mit Input vergleichen. Java Basics - Anfänger-Themen 5
C Bei der LinkedList auf Palindrom überprüfen Java Basics - Anfänger-Themen 4
F Element aus LinkedList löschen Java Basics - Anfänger-Themen 3
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
S Jfreechart mit LinkedList befüllen Java Basics - Anfänger-Themen 1
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
K LinkedList aus Arrays ( Lösungsraum Mastermind ) Java Basics - Anfänger-Themen 5
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
Farbenfroh int in LinkedList einsortieren Java Basics - Anfänger-Themen 4
W Klassen LinkedList funktioniert nicht Java Basics - Anfänger-Themen 6
X LinkedList - Index eines Objekts Java Basics - Anfänger-Themen 2
S Strings in eine LinkedList schreiben und auslesen? Java Basics - Anfänger-Themen 4
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
T Datentypen gleichmäßiges mischen von 2 LinkedList Java Basics - Anfänger-Themen 3
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
J Datentypen Array von einer LinkedList Java Basics - Anfänger-Themen 5
R LinkedList Java Basics - Anfänger-Themen 8
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
B LinkedList remove Java Basics - Anfänger-Themen 5
J statische Methoden auf eine LinkedList initialisieren? Java Basics - Anfänger-Themen 5
G Hausaufgabe mit LinkedList und LinkedListStack verstehen Java Basics - Anfänger-Themen 6
N LinkedList-checkForComodification Java Basics - Anfänger-Themen 11
N LinkedList Java Basics - Anfänger-Themen 17
P LinkedList sortieren Java Basics - Anfänger-Themen 20
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
Z Erste Schritte LinkedList Werte abfragen und vergleichen Java Basics - Anfänger-Themen 3
B SUCHE: Threadsafe LinkedList Java Basics - Anfänger-Themen 10
Binary.Coder Wie linkedlist für Djikstra nutzen? Java Basics - Anfänger-Themen 6
M Arrays in LinkedList Java Basics - Anfänger-Themen 4
R Collections Probleme mit contains()-Methode [LinkedList] Java Basics - Anfänger-Themen 5
G Collections.binarySearch(LinkedList): cannot find method Java Basics - Anfänger-Themen 6
M LinkedList aktuelle position Java Basics - Anfänger-Themen 3
G Frage zu LinkedList Java Basics - Anfänger-Themen 15
H Dynamische Bindung mit Interfaces und LinkedList Java Basics - Anfänger-Themen 7
I LinkedLIst / ArrayList Konstruktor Java Basics - Anfänger-Themen 4
B Collections RandomAccessfile & Linkedlist Java Basics - Anfänger-Themen 4
S Speichermangel ArrayList/LinkedList Java Basics - Anfänger-Themen 3
V LinkedList size() Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
D Probleme mit LinkedList Java Basics - Anfänger-Themen 6
L LinkedList vorgänger Knoten zurück geben Java Basics - Anfänger-Themen 4
S LinkedList indexOf() - geht des irgendwie schneller? Java Basics - Anfänger-Themen 23
S LinkedList<String[]> filtern und sortieren Java Basics - Anfänger-Themen 9
W LinkedList Java Basics - Anfänger-Themen 12
S Frage zum speichern der Daten in einer LinkedList Java Basics - Anfänger-Themen 2
D Fenster in LinkedList verwalten Java Basics - Anfänger-Themen 2
C HashMap mit LinkedList Java Basics - Anfänger-Themen 5
S Datentypen LinkedList Konstruktor, add Alternative Java Basics - Anfänger-Themen 2
truesoul LinkedList Problem Java Basics - Anfänger-Themen 6
M Java Generics LinkedList Java Basics - Anfänger-Themen 5
H LinkedList Element an Stelle x ausgeben? Java Basics - Anfänger-Themen 5
D LinkedList aufrufe Java Basics - Anfänger-Themen 3
S Problem mit ObjectInputStream beim Einlesen von LinkedList Java Basics - Anfänger-Themen 3
S Serialized LinkedList aus Datei Laden Java Basics - Anfänger-Themen 15
S LinkedList Java Basics - Anfänger-Themen 2
M LinkedList in anderer Klasse nutzen Java Basics - Anfänger-Themen 4
L LinkedList sortieren Java Basics - Anfänger-Themen 5
L heap space, LinkedList umspeichern Java Basics - Anfänger-Themen 15
H LinkedList mit Strings Exception Java Basics - Anfänger-Themen 3
S IndexOutofBoundsException bei linkedlist Java Basics - Anfänger-Themen 5
B Fehlersuche bei LinkedList Java Basics - Anfänger-Themen 3
B LinkedList - Berechnung des Produkts Java Basics - Anfänger-Themen 6
S Sortierte LinkedList nach Variablen durchsuchen und nicht nach INDEX Java Basics - Anfänger-Themen 6
B Unterschied ArrayList und LinkedList Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben