Input/Output Serialisierung

javapklein

Mitglied
Hallo,
ich bekomme bei der Serialisierung und Deserialisierung nicht den korrekten Output.
Die Zeile 63 soll die Ausgabe wie Zeile 51 haben.
Bisher bekomme ich jedoch nur die Angaben zu dem Hund. Das alter und der besitzer fehlen.
Wie kann ich diese schreiben und wieder einlesen?
Anbei der Code:
Java:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Lebewesen {
	protected int alter;

	Lebewesen(){		
	}
	Lebewesen(int alter) {	
		this.alter = alter;
	}
	public int getAlter() {
		return alter;
	}	
}
class Mensch extends Lebewesen {
	private String vorname;
	private String nachname;		
	
	Mensch(String vorname, String nachname) {
		this.vorname = vorname;
		this.nachname = nachname;
	}	
	public String toString() {
		return vorname + " " + nachname;
	}
}
class Hund extends Lebewesen implements Serializable {
	
	private String name;
	private transient Mensch besitzer;
			
	Hund(int alter, String name, Mensch besitzer) {
		super(alter);
		this.name = name;
		this.besitzer = besitzer;			
	}
	public String toString() {
		return "Hund: " + name + ", Alter: " + alter + ", Besitzer: " + besitzer;
	}
}
public class Test {

	public static void main(String[] args) {
		
		Hund h = new Hund(2, "Max", new Mensch("Otto", "Meyer"));
		Lebewesen l = new Lebewesen();
		System.out.println(h);
		try {
			FileOutputStream fos = new FileOutputStream("hund.txt");
			ObjectOutputStream os = new ObjectOutputStream(fos);
			os.writeObject(h);
			os.writeInt(l.getAlter());
			os.close();
			FileInputStream fis = new FileInputStream("hund.txt");
			ObjectInputStream is = new ObjectInputStream(fis);
			Hund h2 = (Hund) is.readObject();
			l.alter = is.readInt()  ;
			is.close();
			System.out.println(h2);
			} catch (Exception x ) {
				System.out.println("Fehler hier");
				x.printStackTrace();
			}			
	}
}
 
H

hüteüberhüte

Gast
Zuletzt bearbeitet von einem Moderator:
H

hüteüberhüte

Gast
transient Attribute werden aber sonst "ausgespart". Anders geht es nicht, das würde dem Serialisierungs-Prinzip widersprechen
 

javapklein

Mitglied
Diese Daten müssen auch extra geschrieben und wieder gelesen werden. Wie macht man dies? Wie müssen eigene Methoden für writeObject und readObject aussehen. Habe es mit den Zeilen 56 und 61 probiert. Leider funktioniert dies nicht. Das alter hat immer noch den wert 0. Für Hilfe mit Code wäre ich dankbar.
 

vimar

Bekanntes Mitglied
hier mal nen beispiel für eigene methoden zum lesen und schreiben


lesen(mitm tollen progressbarbalken bis das teil geladen is):

Java:
 public static void loadKMEANS_ClusterList_from_DB_noXML(){
    String fileName = "kmeansClusterlist.ser";
    try{
        
        final ObjectInputStream o = new ObjectInputStream(new BufferedInputStream(
                            new ProgressMonitorInputStream(null, "Lese "
                                    + fileName, new FileInputStream(fileName))));

                    KMEANS.ClusterList = (ArrayList<cluster>) o.readObject();
                    KMEANS.PflanzenListe = (ArrayList <String>) o.readObject();
                    o.close();
                 
            }
             catch (Exception e){
        System.out.println("fehler! bei kmeans");   

             }
       }

und hier schreiben:

Java:
 public static void writeKMEANS_ClusterList_to_DB_noXML(){
        
        try{
            
            FileOutputStream datei = new FileOutputStream("kmeansClusterlist.ser");
          //  ByteArrayOutputStream baos = new ByteArrayOutputStream(datei);
            ObjectOutputStream o = new ObjectOutputStream(datei);
           System.out.println("Clusterlist wird nun gespeichert!");
            o.writeObject(KMEANS.ClusterList);
            o.writeObject(SIFT.PflanzenListe);
            System.out.println("Clusterlist gespeichert!");
            o.close();
            
        }
        catch(IOException e){
            System.err.println(e);
        }
        
    }


und ansonsten habe ich irgendwas mal gelesen über "protected" und serialisierung. mach mal zum test public auch wenn das jetzt nicht rational zu erklären ist und ich da event. auch falsch liege.

aber:
ich denke man sollte die klasse lebewesen mit "implements Serializable" machen + für einfach alles was du irgendwie speichern willst getter und setter weil es sich hier um eigene klassen handelt.
 

javapklein

Mitglied
So ich habe das Problem selbst gelöst.
Ich habe eine eigene readObject und writeObject Methode geschreiben. Der Clou war, dass ich das alter auch in der Klasse Hund definieren mußte.
Anbei der funktionierende Code:
Java:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.NoSuchElementException;

class Lebewesen {
	private int alter;

	Lebewesen(){		
	}
	Lebewesen(int alter) {	
		this.alter = alter;
	}	
}
//-------------------------------------------------------------
class Mensch extends Lebewesen {
	private String vorname;
	private String nachname;		
	
	Mensch(String vorname, String nachname) {
		this.vorname = vorname;
		this.nachname = nachname;
	}	
	public String toString() {
		return vorname + " " + nachname;
	}
	public String getVorname() {
		return vorname;
	}
	public String getNachname() {
		return nachname;
	}	
}
//-------------------------------------------------------------
class Hund extends Lebewesen implements Serializable {
	
	private String name;
	private int alter;
	private transient Mensch besitzer;
			
	Hund(int alter, String name, Mensch besitzer) {
		super(alter);
		this.name = name;
		this.alter = alter;
		this.besitzer = besitzer;			
	}
	public String toString() {
		return "Hund: " + name + ", Alter: " + alter + ", Besitzer: " + besitzer;
	}
	private void writeObject(ObjectOutputStream os) throws IOException {
		try {
			os.defaultWriteObject();
			os.writeUTF(besitzer.getVorname());
			os.writeUTF(besitzer.getNachname());
		} catch (IOException e) {
			throw new IOException("writeObject "+ e.getClass().getSimpleName() +": " + e.getMessage());
		} catch (Exception e) {
			System.out.println("writeObject - Sonstiger Fehler" + e.getClass().getSimpleName() +": " + e.getMessage());
		}
	}
	private void readObject(ObjectInputStream is) throws IOException{
		try {
			is.defaultReadObject();
			besitzer = new Mensch(is.readUTF(), is.readUTF());			
		}
		catch (IOException e) {
			throw new IOException("readObject "+ e.getClass().getSimpleName() +": " + e.getMessage());
		}catch (Exception e) {
			System.out.println("readObject - Sonstiger Fehler" + e.getClass().getSimpleName() +": " + e.getMessage());
		}		
	}
}
//--------------------------------------------------------------------------------
public class Test {

	public static void main(String[] args) {
		
		Hund h = new Hund(2, "Max", new Mensch("Otto", "Meyer"));		
		System.out.println(h);
		
		try {	
			FileOutputStream fos = new FileOutputStream("hund.txt");
			ObjectOutputStream os = new ObjectOutputStream(fos);
			os.writeObject(h);	
			os.close();
		}catch (IOException e ) {
			System.out.println("IOFehler beim Outstream aufgetreten");
			e.printStackTrace();
		} catch (Exception e ) {
			System.out.println("Sonstiger Fehler beim Outstream aufgetreten.");
			e.printStackTrace();
		}
       	
		try {
			FileInputStream fis = new FileInputStream("hund.txt");
			ObjectInputStream is = new ObjectInputStream(fis);
			Hund h2 = (Hund) is.readObject();			
			System.out.println(h2);
			is.close();
			} catch (IOException e ) {
				System.out.println("IOFehler beim Instream aufgetreten");
				e.printStackTrace();
			} catch (Exception e ) {
				System.out.println("Sonstiger Fehler beim Instream aufgetreten");
				e.printStackTrace();
			}
	}
}

Nochmals vielen Dank für die Unterstützung, vielleicht kann ja auch jemand mit dem Code was anfangen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Problem mit der Serialisierung Java Basics - Anfänger-Themen 31
M Serialisierung in Java Java Basics - Anfänger-Themen 10
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
I Input/Output Alternative zur Serialisierung/ ImageJ Objecte Java Basics - Anfänger-Themen 7
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
V Java Serialisierung Java Basics - Anfänger-Themen 2
O Objekt Listen serialisierung und deserialisieren Java Basics - Anfänger-Themen 5
U Serialisierung Probleme bei Umsetzung Java Basics - Anfänger-Themen 26
V Serialisierung Umbennung einer Klasse Java Basics - Anfänger-Themen 2
G Input/Output Serialisierung oder Datenbank Java Basics - Anfänger-Themen 6
K Input/Output Serialisierung Java Basics - Anfänger-Themen 7
P Serialisierung - Objekte vergleichen Java Basics - Anfänger-Themen 4
K Serialisierung: speichern und auslesen, auslesen klappt nicht Java Basics - Anfänger-Themen 14
B Std-Serialisierung - Speichern/Laden geht nur auf einem Rechner Java Basics - Anfänger-Themen 17
W Problem mit Serialisierung von jTable Java Basics - Anfänger-Themen 15
E Serialisierung - Exception? Java Basics - Anfänger-Themen 21
T Collections (De)-Serialisierung meines HashSets Java Basics - Anfänger-Themen 3
J Input/Output Serialisierung Java Basics - Anfänger-Themen 6
W Problem mit Serialisierung und TableModel Java Basics - Anfänger-Themen 3
F Sonderzeichen bei XML Serialisierung nicht konvertieren Java Basics - Anfänger-Themen 7
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
L Java Serialisierung Singleton Java Basics - Anfänger-Themen 6
Luk10 Serialisierung bei schon vorhandener Datei Java Basics - Anfänger-Themen 15
I Serialisierung ClassNotFound Java Basics - Anfänger-Themen 8
S serialisierung Java Basics - Anfänger-Themen 3
E Alternativen zur binären Serialisierung ? Java Basics - Anfänger-Themen 9
J Serialisierung - Array-Objekt serialisieren/deserialisieren Java Basics - Anfänger-Themen 6
G Frage zu Serialisierung Java Basics - Anfänger-Themen 4
M Serialisierung erstes Beispiel Java Basics - Anfänger-Themen 4
A Per Serialisierung speichern Java Basics - Anfänger-Themen 2
DStrohma Problem mit Serialisierung Java Basics - Anfänger-Themen 3
T Threads und Serialisierung Java Basics - Anfänger-Themen 4
Z Serialisierung vs. Sicherheit Java Basics - Anfänger-Themen 2
R Serialisierung von Objekten Java Basics - Anfänger-Themen 12
S Serialisierung Java Basics - Anfänger-Themen 8
G Objekt Serialisierung Java Basics - Anfänger-Themen 3
P Serializable - Serialisierung Java Basics - Anfänger-Themen 5
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben