2012-03-29 20 views
9

Tôi có một số mã như thế này:Làm thế nào để sử dụng flush() cho PrintWriter

PrintWriter pw = new PrintWriter(new BufferedReader(....)); 
for(int i=0; i<10; i++) { 
    pw.println("a"); 
    pw.flush();// flush each time when println()? 
} 
pw.close(); 

flush() trong mỗi 'cho' tuyên bố thiết? Tôi nghe nói rằng flush() sẽ tự động gọi khi gọi close(). Nếu tôi viết mã như thế này:

PrintWriter pw = new PrintWriter(new BufferedReader(....), true); 

và tôi sẽ không viết pw.flush() nữa? Cảm ơn.

Trả lời

17

flush()có thể là không bắt buộc trong ví dụ của bạn.

Những gì nó làm là đảm bảo rằng bất cứ điều gì được viết cho người viết trước khi cuộc gọi đến flush() được ghi vào luồng cơ bản, thay vì ngồi trong bộ đệm bên trong.

Phương pháp này có ích trong một số loại hoàn cảnh:

  1. Nếu một quá trình (hoặc chủ đề) cần phải kiểm tra các tập tin trong khi nó được ghi vào, và điều quan trọng là quá trình khác nhìn thấy tất cả các viết gần đây.

  2. Nếu quá trình ghi có thể bị lỗi và điều quan trọng là không ghi vào tệp bị mất.

  3. Nếu bạn đang viết thư cho bảng điều khiển và cần đảm bảo mọi thư được hiển thị ngay sau khi được viết.

+0

Một tiêu đề câu hỏi khác có rất ít liên quan đến câu hỏi, nhưng có gần 5 nghìn lượt xem –

0

Tùy chọn thứ hai là tốt hơn để sử dụng, vì nó sẽ tạo đối tượng PrintWriter tự động quét. Và nếu bạn sử dụng trường hợp đầu tiên, thì tôi không nghĩ rằng tuôn ra() là bắt buộc trong trường hợp mẫu của bạn.

Các vấn đề liên quan