Sortie dans le désordre de System.out.println et System.err.println
En Java, System.out.println () écrit dans le flux de sortie standard, tandis que System.err.println() écrit dans le flux d'erreurs standard. En règle générale, ces flux sont imprimés successivement sur la console. Cependant, dans certaines circonstances, ce comportement peut ne pas être cohérent.
Considérez l'extrait de code suivant :
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
Lorsque vous exécutez ce programme, il produit le résultat suivant :
out out out out out err err err err err
Au lieu d'alterner entre « out » et « err », la sortie affiche tous les messages « out » suivis de tous les messages « err ». Cet écart s'explique par la nature différente des flux de sortie standard et des flux d'erreurs.
Les flux de sortie en Java sont mis en cache, ce qui signifie que les données ne sont pas immédiatement écrites sur la console. Au lieu de cela, il est stocké dans un tampon interne et vidé périodiquement. Le processus de vidage est déclenché par divers critères, tels qu'une certaine période d'inactivité ou l'atteinte d'une taille spécifique par le tampon.
Dans le cas de l'extrait de code ci-dessus, la sortie standard et les flux d'erreurs écrivent dans leurs fichiers respectifs. tampons. Étant donné que les écritures ne sont pas synchronisées, il est possible que le tampon du flux d'erreurs se remplisse en premier et soit vidé, même si certains messages « out » restent encore dans le tampon du flux de sortie. Cela entraîne la sortie dans le désordre observée.
Pour résoudre ce problème, vous pouvez vous assurer que les deux flux de sortie sont vidés après chaque écriture. Le code suivant inclut des appels à System.out.flush() et System.err.flush() dans la boucle :
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.out.flush(); System.err.println("err"); System.err.flush(); } }
Avec cette modification, la sortie sera imprimée dans l'ordre alterné attendu :
out err out err out err out err out err
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!