Anhängen an vorhandene Objektströme
Es stellt sich die Frage, ob das Anhängen an einen ObjectOutputStream machbar ist. Ein Versuch, eine Liste von Objekten anzuhängen, schlägt beim Lesen zeitweise fehl, was zu einer java.io.StreamCorruptedException führt.
Die typische Verwendung umfasst:
FileOutputStream fos = new FileOutputStream (preferences.getAppDataLocation() + "history" , true); ObjectOutputStream out = new ObjectOutputStream(fos); out.writeObject( new Stuff(stuff) ); out.close();
Anschließend beim Lesen:
FileInputStream fis = new FileInputStream ( preferences.getAppDataLocation() + "history"); ObjectInputStream in = new ObjectInputStream(fis); try{ while(true) history.add((Stuff) in.readObject()); }catch( Exception e ) { System.out.println( e.toString() ); }
Das Unterklassifizieren von ObjectOutputStream und das Überschreiben der writeStreamHeader-Methode liefert die Lösung:
public class AppendingObjectOutputStream extends ObjectOutputStream { public AppendingObjectOutputStream(OutputStream out) throws IOException { super(out); } @Override protected void writeStreamHeader() throws IOException { // do not write a header, but reset: // this line added after another question // showed a problem with the original reset(); } }
Instanziieren Sie einen anfügbaren Stream, wenn die Verlaufsdatei vorhanden ist (ohne Header anhängen) oder einen Originalstream, wenn er nicht existiert (mit Header erstellen).
Das obige ist der detaillierte Inhalt vonKönnen Sie in Java an vorhandene ObjectOutputStreams anhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!