Heim >Java >javaLernprogramm >Können Sie in Java an vorhandene ObjectOutputStreams anhängen?

Können Sie in Java an vorhandene ObjectOutputStreams anhängen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-16 20:19:17151Durchsuche

Can You Append to Existing ObjectOutputStreams in Java?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn