2016-04-07 13 views
1

Ich habe eine Klasse Shape die Serializable-Schnittstelle implementiert, sparte ich 3 Objekte in eine Datei namens file.ser und ich konnte sie erfolgreich wieAnzahl der serialisierten Objekte in der Datei

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file.ser")); 
Shape[] shapes = new Shape[6]; 
shapes[0] = (Shape) ois.readObject(); 
shapes[1] = (Shape) ois.readObject(); 
shapes[2] = (Shape) ois.readObject(); 
ois.close(); 

in diesem Beispiel folgende abrufen Ich weiß, Anzahl der Objekte, sondern in anderen Anwendungen würde ich nicht wissen so, bis wir lesen Sie weiter Ausnahme immer

List<Shape> shapes = new ArrayList<>(); 
ObjectInputStream ois = null; 
try { 
    ois = new ObjectInputStream(new FileInputStream("file.ser")); 
    while (true) { 
     Shape shape = (Shape) ois.readObject(); 
     shapes.add(shape); 
    } 
} finally { 
    if (ois != null) 
     ois.close(); 
} 

gibt es einen besseren Weg, oder ist dies die einzige zur Verfügung?

Antwort

2

Ein besserer Weg wäre, die Anzahl der enthaltenen Objekte in die Datei zu schreiben. Also beim Lesen zuerst die Anzahl abrufen. Dann wissen Sie, wie viele Objekte Sie lesen können, und Sie können das Array auch entsprechend dimensionieren.

Alternativ können Sie auch ein Array oder eine Liste von Shapes statt count + single objects schreiben.

Verwandte Themen