Maison > Java > javaDidacticiel > Comment puis-je ajouter un fichier ObjectOutputStream existant sans écraser les données ?

Comment puis-je ajouter un fichier ObjectOutputStream existant sans écraser les données ?

Barbara Streisand
Libérer: 2024-12-12 16:49:09
original
387 Les gens l'ont consulté

How Can I Append to an Existing ObjectOutputStream File Without Overwriting Data?

Appendice ObjectOutputStream : une solution avec sous-classement

L'ajout à un ObjectOutputStream peut être une tâche problématique. Comme vous l'avez découvert, le comportement par défaut d'ObjectOutputStream lors de l'écriture dans un fichier existant est de l'écraser, entraînant une perte de données.

Pour résoudre ce problème, la clé est de remplacer le comportement d'ObjectOutputStream. Plus précisément, en remplaçant la méthode writeStreamHeader, nous pouvons empêcher l'écriture de l'en-tête lors de son ajout à un fichier existant. Considérez l'exemple de code suivant :

public class AppendingObjectOutputStream extends ObjectOutputStream {

  public AppendingObjectOutputStream(OutputStream out) throws IOException {
    super(out);
  }

  @Override
  protected void writeStreamHeader() throws IOException {
    // Do not write a header
    reset(); // Added to fix potential issues with previous implementation
  }
}
Copier après la connexion

La sous-classe AppendingObjectOutputStream hérite de la classe ObjectOutputStream d'origine et remplace la méthode writeStreamHeader. Dans cette méthode remplacée, nous n’écrivons pas d’en-tête mais réinitialisons le flux. Cela nous permet effectivement d'ajouter des données à un fichier existant sans l'écraser.

Pour utiliser cette technique, vous pouvez vérifier si le fichier historique existe ou non. Si le fichier existe, instanciez AppendingObjectOutputStream ; sinon, utilisez le ObjectOutputStream normal. Voici une version mise à jour de votre code utilisant cette approche :

OutputStream out;
if (historyFile.exists()) {
  out = new AppendingObjectOutputStream(new FileOutputStream(historyFile, true));
} else {
  out = new ObjectOutputStream(new FileOutputStream(historyFile));
}
out.writeObject(new Stuff(stuff));
out.close();
Copier après la connexion

En utilisant la classe AppendingObjectOutputStream lors de l'ajout à un fichier existant, vous pouvez conserver les données existantes tout en ajoutant de nouveaux objets. Cette technique vous permet de créer un magasin de données persistant qui peut croître selon vos besoins sans avoir besoin d'écrasement ou de perte de données.

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!

source:php.cn
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