Maison > Java > javaDidacticiel > Pourquoi les sorties System.out.println et System.err.println sont-elles parfois hors service ?

Pourquoi les sorties System.out.println et System.err.println sont-elles parfois hors service ?

Susan Sarandon
Libérer: 2024-12-15 05:16:18
original
216 Les gens l'ont consulté

Why Are System.out.println and System.err.println Outputs Sometimes Out of Order?

System.out.println et System.err.println Irrégularité de l'ordre d'impression

Lors de l'impression de messages sur la console à l'aide de System.out.println () et System.err.println() dans une boucle, vous pourriez rencontrer le problème où les messages imprimés apparaissent dans le désordre. Malgré l'appel alterné des méthodes d'impression, la sortie affiche un ordre groupé d'un type de message suivi de l'autre, ce qui prête à confusion.

Ce phénomène se produit car System.out et System.err représentent des flux de sortie distincts. Chaque flux conserve son propre tampon pour mettre en cache les caractères imprimés jusqu'à ce qu'il atteigne un certain seuil ou qu'une opération de vidage soit effectuée. L'opération de vidage envoie le texte mis en mémoire tampon à la fenêtre de la console réelle.

Dans l'extrait de code fourni :

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println("out");
        System.err.println("err");
    }
}
Copier après la connexion

La boucle écrit à plusieurs reprises "out" dans System.out et "err" dans Système.err. Cependant, ces flux vident leurs tampons indépendamment. Par défaut, l'opération de vidage est déclenchée après un certain temps ou lorsque le buffer atteint son seuil.

Comme chaque flux possède son propre buffer, les caractères s'accumulent séparément. Une fois la boucle terminée, le tampon System.out est vidé, imprimant tous les messages « out » accumulés, suivi du vidage du tampon System.err et imprimant tous les messages « err ». Cela entraîne un modèle de sortie inégal.

Pour résoudre ce problème et garantir que les messages s'impriment dans l'ordre dans lequel ils sont appelés, vous pouvez vider explicitement chaque tampon en utilisant :

System.out.flush();
System.err.flush();
Copier après la connexion

Par en vidant les tampons, vous forcez les caractères mis en tampon à être immédiatement affichés sur la console, garantissant ainsi un ordre d'impression cohérent et logique.

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