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 }
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!