Hallo!
Ich fürchte, du bringst da gerade einiges durcheinander!
Zuerst mal macht das IMHO überhaupt keinen Sinn, etwas nach Object zu casten. Alles in Java ist ein Object. Von der kleinsten bis zur größten Klasse sind haben sie ALLE von Object geerbt.
Wenn du in deinem ObjectInputStream die Methode readObject() aufrufst, dann bekommst du bereits ein Object zurück. Wie dieses Object genau aussieht, ist Java völlig egal - es ist in irgendeiner Weise ein "Ding", und damit gibt sich Java zufrieden.
Aber in den meisten Fällen willst du mit deinen Daten ja mehr anfangen, als Objects im Allgemeinen können. Also musst du Java erklären, dass es das betrachtete Object nicht mehr als Object, sondern als etwas anderes betrachten muss. Und das tust du, indem du castest:
Java:
Object myObject = myObjectInputStream.readObject();
Adress myAdess = (Adress) myObject;
Hier liest du zunächst das Object aus dem InputStream. Und im 2. Schritt formst du dann aus dem erhaltenen Object eine Adresse.
Auf genau die gleiche Weise kannst du, statt einer Adresse, auch ein Array von Rechnungen erhalten, vorrausgesetzt natürlich, du hast vorher auch ein solches hineingeschoben!
Also noch mal in deinem Code:
Java:
//deine Load-Methode
static public Object load(String name)
{
InputStream fis = null;
Object obj = new Object();
try
{
fis = new FileInputStream( name );
ObjectInputStream o = new ObjectInputStream( fis );
obj = (Object) o.readObject();
}
catch ( IOException e ) { System.err.println( e ); }
catch ( ClassNotFoundException e ) { System.err.println( e ); }
finally { try { fis.close(); } catch ( Exception e ) { } }
return obj;
}
//deine Save-Methode
static public void save(Object obj, String name)
{
OutputStream fos = null;
try
{
fos = new FileOutputStream(name);
ObjectOutputStream o = new ObjectOutputStream( fos );
o.writeObject(obj);
}
catch ( IOException e ) { System.err.println( e ); }
finally { try { fos.close(); } catch ( Exception e ) { }
}
}
//Methode zum Schreiben eines Arrays von BestellPositionen
public void writeBestellPos(BestellPos[] positions, fileName) {
//Die Positionen mit obiger Funktion einfach in Datei fileName speichern
save(positions, fileName)
}
//Methode zum Lesen eines Array von BestellPositionen
public BestellPos[] readBestellPos(String fileName) {
//betreffende Datei auslesen lassen
Object dateiInhalt = load(fileName);
//aus Inhalt ein BestellPos "basteln"
BestellPos[] result = (BestellPos[]) dateiInhalt;
//zurückgeben
return result;
}
Du steckst einfach das gesamte [] in einem Rutsch in die save-Methode, die du schon geschrieben hast. Die nimmt schließlich ein Object entgegen, und Java ist egal, ob dieses Object nun ein Auto, ein Pferd, eine Adresse oder sonstwas darstellt - es ist ein Object, und damit genug.
Intern wird ein wenig mehr gefordert - damit du das Object in den Stream stecken kannst, muss es das Interface Serializable implementieren - vielleicht könntest du deine save-Funktion also dahin erweitern, dass es nicht allgemeine Objects, sondern nur Serializables entgegennimmt...
Jedenfalls möchtest du jetzt den Krams wieder aus der Datei haben. Also gleiches Spiel rückwärts: Wir haben ein Object reingesteckt, also holen wir uns mit der load-Fkt ein Object wieder raus.
Und da wir ja wissen (oder zu wissen glauben), dass ein Array drinsteckt, formen wir das anschließend wieder in ein Array um...
So weit klar?
mfg,
RoCMe