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

Pouvez-vous ajouter des ObjectOutputStreams existants en Java ?

Patricia Arquette
Libérer: 2024-12-16 20:19:17
original
224 Les gens l'ont consulté

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();
Copier après la connexion

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() );
}
Copier après la connexion

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

}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal