System.out.println dan System.err.println Ketidakteraturan Pesanan Pencetakan
Apabila mencetak mesej ke konsol menggunakan System.out.println () dan System.err.println() dalam satu gelung, anda mungkin menghadapi isu di mana mesej yang dicetak muncul di luar susunan yang dijangkakan. Walaupun menggunakan kaedah cetakan secara bergilir-gilir, output memaparkan susunan terkumpul bagi satu jenis mesej diikuti oleh yang lain, yang membawa kepada kekeliruan.
Fenomena ini berlaku kerana System.out dan System.err mewakili aliran output yang berbeza. Setiap strim mengekalkan penimbalnya sendiri untuk cache aksara yang dicetak sehingga mencapai ambang tertentu atau operasi siram dilakukan. Operasi flush menghantar teks buffer ke tetingkap konsol sebenar.
Dalam coretan kod yang disediakan:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
Gelung berulang kali menulis "keluar" ke System.out dan "err" ke System.err. Walau bagaimanapun, aliran ini mengalirkan penimbalnya secara bebas. Secara lalai, operasi siram dicetuskan selepas masa tertentu atau apabila penimbal mencapai ambangnya.
Memandangkan setiap strim mempunyai penimbalnya sendiri, aksara terkumpul secara berasingan. Selepas gelung selesai, penimbal System.out akan disiram, mencetak semua mesej "keluar" terkumpul, diikuti oleh penimbal System.err membilas dan mencetak semua mesej "err". Ini mengakibatkan corak keluaran yang tidak sekata.
Untuk membetulkan isu ini dan memastikan bahawa mesej dicetak mengikut susunan yang dipanggil, anda boleh mengepam secara eksplisit setiap penimbal menggunakan:
System.out.flush(); System.err.flush();
Oleh mengepam penimbal, anda memaksa aksara penimbal untuk dipaparkan dengan segera pada konsol, memastikan susunan cetakan yang konsisten dan logik.
Atas ialah kandungan terperinci Mengapa System.out.println dan System.err.println Output Kadang-kadang Tidak Tertib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!