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