Output Out-of-Order daripada System.out.println dan System.err.println
Dalam Java, System.out.println () menulis kepada aliran keluaran standard, manakala System.err.println() menulis kepada aliran ralat standard. Biasanya, strim ini dicetak ke konsol mengikut turutan. Walau bagaimanapun, dalam keadaan tertentu, tingkah laku ini mungkin tidak konsisten.
Pertimbangkan coretan kod berikut:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
Apabila anda menjalankan program ini, ia menghasilkan output berikut:
out out out out out err err err err err
Daripada bergantian antara "keluar" dan "err," output menunjukkan semua mesej "keluar" diikuti dengan semua "err" mesej. Percanggahan ini dijelaskan oleh jenis output standard dan aliran ralat yang berbeza.
Strim output dalam Java dicache, bermakna data tidak ditulis dengan serta-merta ke konsol. Sebaliknya, ia disimpan dalam penimbal dalaman dan dibilas secara berkala. Proses pembilasan dicetuskan oleh pelbagai kriteria, seperti tempoh tertentu tidak aktif atau penimbal mencapai saiz tertentu.
Dalam kes coretan kod di atas, kedua-dua output standard dan aliran ralat sedang menulis kepada masing-masing penampan. Memandangkan penulisan tidak disegerakkan, penimbal strim ralat boleh diisi terlebih dahulu dan dibilas, walaupun beberapa mesej "keluar" masih kekal dalam penimbal strim output. Ini menghasilkan output tersusun yang diperhatikan.
Untuk menyelesaikan isu ini, anda boleh memastikan bahawa kedua-dua strim output dipadamkan selepas setiap penulisan. Kod berikut termasuk panggilan ke System.out.flush() dan System.err.flush() dalam gelung:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.out.flush(); System.err.println("err"); System.err.flush(); } }
Dengan pengubahsuaian ini, output akan dicetak dalam susunan berselang-seli yang dijangkakan:
out err out err out err out err out err
Atas ialah kandungan terperinci Mengapakah `System.out.println` dan `System.err.println` Kadangkala Menghasilkan Out-of-Order Output dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!