Khi bộ đệm được sử dụng bởi System.out.print
lấp đầy, đầu ra được ghi vào tệp (hoặc thiết bị đầu cuối hoặc mục tiêu dữ liệu khác được kết nối với luồng đầu ra tiêu chuẩn của chương trình), dẫn đến bộ đệm trống. Viết đầu ra mà không quan tâm đến kích thước bộ đệm là việc sử dụng bình thường. Bạn sẽ không bao giờ sụp đổ hoặc chặn chương trình của bạn hoặc mất dữ liệu từ không gọi flush
.
Bạn chỉ cần gọi flush
một cách rõ ràng nếu bạn cần cung cấp dữ liệu ngay bên ngoài chương trình của mình ngay lập tức. Ví dụ, nếu chương trình của bạn đang trao đổi dữ liệu qua lại với chương trình khác, và bạn đang gửi yêu cầu đến chương trình đó và sẽ chờ trả lời của chương trình đó, bạn cần gọi flush
sau khi gửi yêu cầu của bạn để đảm bảo rằng chương trình khác nhận được nó. Tương tự như vậy, nếu chương trình của bạn (hoặc máy nó chạy trên) treo, chỉ có đầu ra đến lần cuối cùng bạn gọi là flush
được đảm bảo đã được viết ra.
Nếu luồng được đặt tự động xả, sau đó viết ký tự dòng mới (rõ ràng hoặc thông qua println
) cũng tốt như gọi flush
. Gọi số close
cũng gọi số flush
(đó là lý do tại sao close
có thể ném một số IOException
: có thể phải ghi dữ liệu và không thể, ví dụ: vì luồng được kết nối với tệp trên đĩa đầy đủ).
Lưu ý rằng xả bộ đệm có thể khiến chương trình chặn, nếu luồng System.out
được kết nối với không sẵn sàng ngay lập tức để nhận dữ liệu (ví dụ: khi dữ liệu được chuyển đến chương trình khác không đọc dữ liệu của nó ngay lập tức). Vì bộ đệm có thể được xả sạch bất cứ lúc nào (vì bộ đệm xảy ra đầy), bất kỳ cuộc gọi nào đến print
với đối số không trống đều có khả năng chặn.
Để biết thêm thông tin, hãy xem buffered streams tutorial và tài liệu của java.io.PrintStream
class.
Sử dụng 'System.setOut()' để thay thế 'System.out' bằng luồng tùy chỉnh ném một ngoại lệ – paislee
cả hai đều sai. '\ n' không liên quan gì đến nó, gọi' .close() 'hoặc' .flush() 'có mọi thứ cần làm với nội dung của một dòng được viết ra hoặc bị mất. –