Rumah > Java > javaTutorial > Mengapa System.out.println() dan System.err.println() Tidak Keluar dalam Pesanan Yang Dijangka?

Mengapa System.out.println() dan System.err.println() Tidak Keluar dalam Pesanan Yang Dijangka?

Linda Hamilton
Lepaskan: 2024-12-15 07:25:11
asal
217 orang telah melayarinya

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

Tertib Sistem.out.println dan System.err.println yang Tidak Dijangka

Pemerhatian anda bahawa System.out.println() dan Panggilan System.err.println() tidak dicetak ke konsol mengikut susunan yang anda buat adalah perkara biasa isu.

Dalam Java, System.out dan System.err ialah dua aliran berbeza yang digunakan untuk menulis output ke konsol. System.out digunakan untuk output standard, manakala System.err digunakan untuk mesej ralat. Secara lalai, strim ini disiram secara berbeza.

Apabila anda memanggil System.out.println(), output ditambahkan pada penimbal output standard. Walau bagaimanapun, apabila anda memanggil System.err.println(), output ditambah kepada kedua-dua penimbal output standard dan penimbal output ralat. Ini kerana System.err bertujuan untuk mesej ralat, yang harus sentiasa dipaparkan, walaupun output standard sedang diubah hala.

Kandungan penimbal ini disiram pada masa yang berbeza. Penimbal keluaran standard dipadamkan apabila putus talian ditemui, manakala penimbal keluaran ralat disiram apabila ralat berlaku atau apabila program keluar.

Akibatnya, jika anda membuat panggilan bergantian ke System.out.println () dan System.err.println() dalam satu gelung, output tidak akan muncul dalam susunan yang anda jangkakan. Sebaliknya, semua panggilan System.out.println() akan dipadamkan bersama, diikuti dengan semua panggilan System.err.println().

Penyelesaian

Kepada selesaikan isu ini, anda boleh memaksa penimbal disiram serta-merta selepas setiap panggilan ke System.out.println() dan System.err.println(). Ini boleh dilakukan menggunakan kaedah flush() pada strim yang sepadan.

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
}
Salin selepas log masuk

Dengan menambahkan panggilan flush(), anda memastikan bahawa output daripada setiap strim dihantar ke konsol dengan segera, jadi ia akan muncul dalam susunan yang betul.

Atas ialah kandungan terperinci Mengapa System.out.println() dan System.err.println() Tidak Keluar dalam Pesanan Yang Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan