Input/Output Serialisiertes Objekt speichern und laden

Developer_X

Top Contributor
Sehr geehrte Com,
ich habe folgendes Problem:
Ich habe eine Klasse, die sehr komplex ist, und Code heißt. Diese Klasse enthält in einer
LinkedList viele weitere Objekte, die Tochter-/Unterklassen von "Code" sind.

Ich habe nun die Aufgabe dieses Code Objekt mit den zahlreichen Unterobjekten zu speichern.
Daher wollte ich den ObjectOutput- bzw. ObjectInputStream verwenden.

Wenn ich das so mache:
Java:
package codestatement;

import java.io.Serializable;
import java.util.LinkedList;

public class Code implements Serializable
{
//	Attributes
	public LinkedList<CodeStatement> codestatements = new LinkedList<CodeStatement>();
//     CodeStatement implementiert auch Serializable

//	Constructor
	
//	Methods
	
}
Java:
// code ist eine Integer Variable
	public Code loadCode() throws IOException
	{
		ObjectInputStream ois =
                new ObjectInputStream(new FileInputStream("projects/"+p.name+"/code#"+code+".code"));
		try 
		{
			Object o = ois.readObject();
			ois.close();
			return (Code) o;
		} 
		catch (ClassNotFoundException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		code++;
		return null;
	}
// die Methoden saveCode und loadCode sind in unterschiedlichen Klassen, daher auch die Variable
// code in unterschiedlichen Klassen
	public void saveCode(Code c)
	{
		try 
		{
			FileSystem.createFile("projects/"+p.name+"/code#"+code+".code");
			FileOutputStream out = new FileOutputStream("projects/"+p.name+"/code#"+code+".code");
			ObjectOutputStream oout = new ObjectOutputStream(out);
			oout.writeObject(c);
			oout.close();
		} 
		catch (IOException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}        
        
                code++;
	}

Beim Speichern werden also Dateien erstellt, in welche dann die Codeobjekte einzeln gespeichert werden sollen. Das klappt soweit auch ganz gut, sieht zumindest so aus, beim Öffnen der Datei sieht man eine Menge sachen.

Doch wenn man dann das Ganze läd
Java:
//	Laden Code
	Code c = loadCode();
Dann hat das Code Objekt überhaupt keine Elemente.

Was kann man da machen, ist da irgendwie ein grundlegender Fehler passiert, wo kann die Fehlerursache liegen?

Danke,
m.f.G.: Developer_X
 
Ah ich habe das Problem gelöst:

Jedes Objekt, das gespeichert werden soll, muss neben der Implementierung von
Serializable auch noch eine serialVersionID enthalten, diese kann man, z.B. bei meiner
IDE automatisch generieren lassen, ist aber ganz einfach:
Das Objekt muss als Attribut z.B.
Java:
	private static final long serialVersionUID = -1114981622943048489L;
sowas enthalten.

m.f.G.: Developer_X
 

Neue Themen


Zurück
Oben