Heim >Java >javaLernprogramm >Warum erscheint die Ausgabe von System.out.println und System.err.println nicht in der richtigen Reihenfolge?
Grundlegendes zum Out-of-Order-Drucken mit System.out.println und System.err.println
Bei Verwendung von System.out.println und System.err.println kann es zu einem unerwarteten Verhalten kommen, bei dem die Ausgabe dieser beiden Methoden im nicht in der richtigen Reihenfolge erscheint Konsole.
Problem:
Im bereitgestellten Code:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
Ausgabe:
out out out out out err err err err err
Statt abwechselnd Zwischen „out“ und „err“ zeigt die Ausgabe alle „out“-Zeilen gefolgt von allen „err“-Zeilen. Zeilen.
Ursache:
Dieses Verhalten ist auf die Tatsache zurückzuführen, dass System.out und System.err unterschiedliche Streams sind. Wenn Sie in diese Streams schreiben, werden die Daten zunächst gepuffert. Die gepufferten Daten werden nur zu bestimmten Zeiten in die tatsächliche Konsolenausgabe geschrieben, z. B. wenn:
Standardmäßig werden System.out und System.err geleert anders. System.out wird häufiger geleert als System.err. Daher neigen alle in System.out geschriebenen Daten dazu, vor den in System.err geschriebenen Daten zu erscheinen.
Lösung:
Um sicherzustellen, dass die Ausgabe zwischen „out“ und „out“ wechselt. und „err“ können Sie System.out.flush() und System.err.flush() innerhalb der Schleife aufrufen:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); System.out.flush(); System.err.flush(); } }
Mit dieser Änderung Die Ausgabe wechselt wie erwartet:
out err out err out err out err out err
Das obige ist der detaillierte Inhalt vonWarum erscheint die Ausgabe von System.out.println und System.err.println nicht in der richtigen Reihenfolge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!