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

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
  }
}

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

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!

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
Quelles sont les stratégies pour atténuer les problèmes spécifiques à la plate-forme dans les applications Java?Quelles sont les stratégies pour atténuer les problèmes spécifiques à la plate-forme dans les applications Java?May 01, 2025 am 12:20 AM

Comment Java atténue des problèmes spécifiques à la plate-forme? Java implémente la plate-forme indépendante de la plate-forme via JVM et des bibliothèques standard. 1) Utilisez Bytecode et JVM pour abstraction des différences du système d'exploitation; 2) La bibliothèque standard fournit des API multiplateformes, telles que les chemins de fichier de traitement des classes de chemins et le codage des caractères de traitement de la classe Charset; 3) Utilisez des fichiers de configuration et des tests multiplateformes dans les projets réels pour l'optimisation et le débogage.

Quelle est la relation entre l'indépendance de la plate-forme de Java et l'architecture des microservices?Quelle est la relation entre l'indépendance de la plate-forme de Java et l'architecture des microservices?May 01, 2025 am 12:16 AM

Java'splatformIndependanceNhancesMicRoservices ArchitectureByoFerringDeploymentFlexibilité, cohérence, évolutivité, etportabilité.1) DeploymentFlexibilityAllowsMicroserviceStorUnonanyPlatformwithajvm.2) CohérenceaCossserviceSiceSIGLYPLATFORMWithajvm.2)

Comment GraalVM est-il lié aux objectifs d'indépendance de la plate-forme de Java?Comment GraalVM est-il lié aux objectifs d'indépendance de la plate-forme de Java?May 01, 2025 am 12:14 AM

Graalvm améliore l'indépendance de la plate-forme de Java de trois manières: 1. Interopérabilité transversale, permettant à Java d'interopérer de manière transparente avec d'autres langues; 2. 3. Optimisation des performances, le compilateur Graal génère un code machine efficace pour améliorer les performances et la cohérence des programmes Java.

Comment tester les applications Java pour la compatibilité des plateformes?Comment tester les applications Java pour la compatibilité des plateformes?May 01, 2025 am 12:09 AM

ToeffectivetestjavaapplicationsforPlatformCompatibilité, suivi de l'essence: 1) SetUpAutomatedStestingacrossMultipleplatformSusingcitoolslikejenkinsorgithubacts.

Quel est le rôle du compilateur Java (Javac) dans la réalisation de l'indépendance de la plate-forme?Quel est le rôle du compilateur Java (Javac) dans la réalisation de l'indépendance de la plate-forme?May 01, 2025 am 12:06 AM

Le compilateur Java réalise l'indépendance de la plate-forme de Java en convertissant le code source en bytecode indépendant de la plate-forme, permettant aux programmes Java d'exécuter sur n'importe quel système d'exploitation avec JVM installé.

Quels sont les avantages de l'utilisation de bytecode sur le code natif pour l'indépendance de la plate-forme?Quels sont les avantages de l'utilisation de bytecode sur le code natif pour l'indépendance de la plate-forme?Apr 30, 2025 am 12:24 AM

ByteCodeachievesPlatformIndependanceBeBeingExEcutedByaVirtualmachine (VM), permettant à la codétorunonanyplatformwiththeappo pourpropriév.forexample, javabytecocecanrunonanydevicewithajvm, permettre de "writeonce, runanywhere" fonctionnalité.

Java est-elle vraiment indépendante de la plate-forme à 100%? Pourquoi ou pourquoi pas?Java est-elle vraiment indépendante de la plate-forme à 100%? Pourquoi ou pourquoi pas?Apr 30, 2025 am 12:18 AM

Java ne peut pas atteindre l'indépendance de la plate-forme à 100%, mais son indépendance de la plate-forme est implémentée via JVM et ByteCode pour s'assurer que le code s'exécute sur différentes plates-formes. Les implémentations spécifiques incluent: 1. Compilation dans ByteCode; 2. Interprétation et exécution de JVM; 3. Cohérence de la bibliothèque standard. Cependant, les différences de mise en œuvre de JVM, les différences de système d'exploitation et de matériel et la compatibilité des bibliothèques tierces peuvent affecter l'indépendance de sa plate-forme.

Comment l'indépendance de la plate-forme de Java prend-elle en charge la maintenabilité du code?Comment l'indépendance de la plate-forme de Java prend-elle en charge la maintenabilité du code?Apr 30, 2025 am 12:15 AM

Java réalise l'indépendance de la plate-forme via "Écrire une fois, exécuter partout" et améliore la maintenabilité du code: 1. Réutilisation du code élevé et réduit le développement en double; 2. Coût de maintenance faible, une seule modification est requise; 3. L'efficacité de collaboration d'équipe élevée est élevée, pratique pour le partage des connaissances.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP