Maison >Java >javaDidacticiel >Pouvez-vous ajouter des ObjectOutputStreams existants en Java ?

Pouvez-vous ajouter des ObjectOutputStreams existants en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 20:19:17146parcourir

Can You Append to Existing ObjectOutputStreams in Java?

Ajout à des flux d'objets existants

La question se pose de savoir s'il est possible d'ajouter à un ObjectOutputStream. Une tentative d'ajout d'une liste d'objets échoue par intermittence pendant la lecture, ce qui entraîne une exception java.io.StreamCorruptedException.

L'utilisation typique implique :

FileOutputStream fos = new FileOutputStream
           (preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );
out.close();

Par la suite, pendant la lecture :

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() );
}

Sous-classer ObjectOutputStream et remplacer la méthode writeStreamHeader fournit le solution :

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();
  }

}

Instancier un flux pouvant être ajouté si le fichier historique existe (ajouter sans en-tête) ou un flux original s'il n'existe pas (créer avec un en-tête).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn