Heim >Java >javaLernprogramm >Warum werden System.out.println() und System.err.println() nicht in der erwarteten Reihenfolge ausgegeben?

Warum werden System.out.println() und System.err.println() nicht in der erwarteten Reihenfolge ausgegeben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-15 07:25:11219Durchsuche

Why Doesn't System.out.println() and System.err.println() Output in the Expected Order?

Unerwartete Reihenfolge der Ausgabe von System.out.println und System.err.println

Ihre Beobachtung, dass System.out.println() und System.err.println()-Aufrufe werden nicht in der Reihenfolge, in der Sie sie ausführen, auf der Konsole gedruckt. Dies ist ein häufiges Problem.

In Java System.out und System.err sind zwei verschiedene Streams, die zum Schreiben von Ausgaben in die Konsole verwendet werden. System.out wird für die Standardausgabe verwendet, während System.err für Fehlermeldungen verwendet wird. Standardmäßig werden diese Streams unterschiedlich geleert.

Wenn Sie System.out.println() aufrufen, wird die Ausgabe dem Standardausgabepuffer hinzugefügt. Wenn Sie jedoch System.err.println() aufrufen, wird die Ausgabe sowohl zum Standardausgabepuffer als auch zum Fehlerausgabepuffer hinzugefügt. Dies liegt daran, dass System.err für Fehlermeldungen gedacht ist, die immer angezeigt werden sollten, auch wenn die Standardausgabe umgeleitet wird.

Der Inhalt dieser Puffer wird zu unterschiedlichen Zeiten geleert. Der Standardausgabepuffer wird geleert, wenn ein Zeilenumbruch auftritt, während der Fehlerausgabepuffer geleert wird, wenn ein Fehler auftritt oder wenn das Programm beendet wird.

Als Ergebnis, wenn Sie abwechselnd Aufrufe von System.out.println () und System.err.println() innerhalb einer Schleife wird die Ausgabe nicht in der erwarteten Reihenfolge angezeigt. Stattdessen werden alle System.out.println()-Aufrufe zusammen geleert, gefolgt von allen System.err.println()-Aufrufen.

Lösung

An Um dieses Problem zu beheben, können Sie erzwingen, dass die Puffer sofort nach jedem Aufruf von System.out.println() und System.err.println() geleert werden. Dies kann mithilfe der Methode „flush()“ für die entsprechenden Streams erfolgen.

for (int i = 0; i < 5; i++) {
    System.out.println("out");
    System.out.flush(); // Flush the standard output buffer
    System.err.println("err");
    System.err.flush(); // Flush the error output buffer
}

Durch das Hinzufügen der Aufrufe „flush()“ stellen Sie sicher, dass die Ausgabe jedes Streams sofort an die Konsole gesendet wird, sodass dies auch der Fall ist in der richtigen Reihenfolge erscheinen.

Das obige ist der detaillierte Inhalt vonWarum werden System.out.println() und System.err.println() nicht in der erwarteten Reihenfolge ausgegeben?. 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