Heim >Java >javaLernprogramm >Warum erscheint die Ausgabe von System.out.println und System.err.println nicht in der richtigen Reihenfolge?

Warum erscheint die Ausgabe von System.out.println und System.err.println nicht in der richtigen Reihenfolge?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-26 07:58:10921Durchsuche

Why Does System.out.println and System.err.println Output Appear Out of Order?

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:

  • Der Puffer voll ist.
  • Das Programm wird beendet.
  • System .out.flush() oder System.err.flush() wird aufgerufen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn