mehrere Objekte deserialisieren

chickenwings

Erfahrenes Mitglied
Hallo,

ich habe ein Klasse, die mir ein Objekt serialisiert:
Code:
...
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(FILENAME,true));
os.writeObject(flug);
os.close();
...

In der Datei FILENAME sind mehrere Objekte serialisiert, die ich wieder deserialisieren möchte. Ich weiss daß ich irgendwie eine Schleife brauche, nur bin ich mit Filehandling noch nicht so sehr vertraut. Mein Versuch sah so aus, lieferte aber nur das erste Objekt:
Code:
...
ObjectInputStream is = new ObjectInputStream(new FileInputStream(FILENAME));	
try {
	System.out.println(is.readObject().toString());
} catch (ClassNotFoundException e) {
}
is.close();
...

wie komme ich nun an alle Objekte heran?
Problem ist auch, daß ich nicht genau sagen kann wie die Datei aufgebaut ist. Je nachdem mit welchem Editor ich mir diese ansehe, habe ich mehrer Zeilen oder nur eine.

Für Hilfe bin ich dankbar.
chickenwings
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.Serializable;
import java.util.Arrays;

/**
 * @author Tom
 *
 */
public class SomeSerializableObject implements Serializable{
  /**
   * 
   */
  private static final long serialVersionUID = -6895664047998708850L;
  String data;
  int value;
  Serializable[] objects;
  
  /**
   * 
   */
  public SomeSerializableObject() {
    super();
    // TODO Auto-generated constructor stub
  }
  /**
   * @param data
   * @param value
   * @param objects
   */
  public SomeSerializableObject(String data, int value, Serializable[] objects) {
    super();
    this.data = data;
    this.value = value;
    this.objects = objects;
  }
  /**
   * @return the data
   */
  public String getData() {
    return data;
  }
  /**
   * @param data the data to set
   */
  public void setData(String data) {
    this.data = data;
  }
  /**
   * @return the value
   */
  public int getValue() {
    return value;
  }
  /**
   * @param value the value to set
   */
  public void setValue(int value) {
    this.value = value;
  }
  /**
   * @return the objects
   */
  public Serializable[] getObjects() {
    return objects;
  }
  /**
   * @param objects the objects to set
   */
  public void setObjects(Serializable[] objects) {
    this.objects = objects;
  }
  
  @Override
  public String toString() {
    return this.data + " " + this.value + " " + Arrays.toString(objects);
  }
}

Java:
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * @author Tom
 *
 */
public class MultipleSerializationExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    File objectStore = new File("c:/objectStore.ser");
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(objectStore));
    objectOutputStream.writeObject("Hallo");
    objectOutputStream.writeObject(Integer.valueOf(1000));
    objectOutputStream.writeObject(new SomeSerializableObject("XXX",4711,new Serializable[]{1}));
    objectOutputStream.close();
    
    
    ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(objectStore));
    Object o = objectInputStream.readObject();
    System.out.println(o + " ->" + o.getClass());
    o = objectInputStream.readObject();
    System.out.println(o + " ->" + o.getClass());
    o = objectInputStream.readObject();
    System.out.println(o + " ->" + o.getClass());
    objectInputStream.close();
  }
}

Ausgabe:
Code:
Hallo ->class java.lang.String
1000 ->class java.lang.Integer
XXX 4711 [1] ->class de.tutorials.SomeSerializableObject

Du musst die Objekte eben in der Reihenfolge auslesen in der du sie serialisiert hast.

Gruß Tom
 
Hallo,

ich habe das selbe Problem.
Ich schreibe ein objecte in ein File und will es danach wieder auslesen.
Das Schreiben funkt. wunderbar, es wird ein Object nach dem anderen
in der Datei angefügt, doch leider funkt. das Auslesen nicht so richtig.

Ich bekomme immer nur das erst Object ausgelesen und danach nichts weiter,
selbst wenn ich weiss wieviele Objecte in der Datei liegen und ich sie manuel
auslesen will, kommt leider immer nur das erste Object raus.
Eigentlich soll das Auslesen in einer while-schleife umgesetzt werden,
so im Stil
Code:
ObjectInputStream o = new ObjectInput....

while(o.readObject() != null) {
     
   //ausgabe des gespeicherten objektes

}

Vielleicht kann mir ja jemand etwas spannendes zu diesem Thema erzählen.

Vielen Dank!

Fallout Boy
 
Zurück