Theo tài liệu java, hãy gọi close() trên bất kỳ luồng java.io nào tự động gọi flush(). Nhưng tôi đã thấy trong rất nhiều ví dụ, ngay cả trong các mã sản xuất, các nhà phát triển đã sử dụng rõ ràng flush() ngay trước khi close(). Trong điều kiện nào chúng ta cần sử dụng flush() ngay trước close()?Dùng flush() trước khi đóng()
Trả lời
Nhà phát triển có thói quen gọi flush() sau khi viết nội dung nào đó phải được gửi đi.
IMHO Sử dụng tuôn ra() sau đó đóng() là phổ biến khi chỉ có một cách viết, ví dụ:
// write a message
out.write(buffer, 0, size);
out.flush();
// finished
out.close();
Như bạn có thể thấy dấu() là thừa, nhưng có nghĩa là bạn đang theo dõi một mẫu.
dự phòng + mẫu = chống mẫu? – Robino
Tùy thuộc vào lớp implenting, điều này có thể không cần thiết. Ví dụ: nếu someinterface.getOutputStream() trả về một OutputStream, bạn có thể không biết nếu phương thức close gọi flush hay nếu phương thức flush là trống, nếu nó không được ghi rõ ràng. Ví dụ. URLConnection.getOutputStream(): https://docs.oracle.com/javase/8/docs/api/java/net/URLConnection.html#getOutputStream-- – Puce
Tôi đoán trong nhiều trường hợp đó là vì họ không biết close()
cũng gọi số flush()
, vì vậy họ muốn được an toàn.
Dù sao, việc sử dụng luồng được lưu vào bộ đệm nên thực hiện xả tay thủ công gần như dư thừa.
Được thăng hạng. Bất kỳ ai, trên thực tế, không nên giả định rằng tất cả 'close()' cũng gọi 'flush()'. –
sử dụng phương thức flush()
ngay lập tức ghi dữ liệu đệm vào đĩa (hoặc gần như ngay lập tức), vì vậy đôi khi bạn muốn đảm bảo rằng nội dung của bạn được lưu trữ trước khi đóng.
Tôi nghĩ rằng bạn đang nhận được downvoted vì đó không thực sự là những gì OP được yêu cầu. Có thể cải thiện câu trả lời của bạn một chút? –
Trạng thái Javadoc: "Nếu đích dự định của luồng này là trừu tượng được cung cấp bởi hệ điều hành cơ bản, ví dụ: tệp, sau đó xả luồng đảm bảo chỉ các byte được ghi trước đó luồng được chuyển đến hệ điều hành để ghi ; nó không đảm bảo rằng chúng thực sự được ghi vào một thiết bị vật lý như ổ đĩa. " 'flush()' chỉ đảm bảo rằng Java xóa bộ đệm của nó. Hệ điều hành có thể có của riêng mình. –
- 1. C++ std :: ofstream flush() nhưng không đóng()
- 2. Hỏi người dùng trước khi đóng ứng dụng C# WPF
- 3. Dọn dẹp trước khi đóng QCoreApplication
- 4. Buộc GVim nhắc trước khi đóng
- 5. Android: Flush DNS
- 6. Xác nhận trước khi đóng tab/trình duyệt
- 7. Tải mảnh vỡ trước khi ngăn điều hướng đóng
- 8. WiX đóng ứng dụng trước khi gỡ cài đặt - đóng ứng dụng đang mở tin nhắn
- 9. Đóng HttpClient kết nối trước khi timout đạt
- 10. Cách đóng ứng dụng trước khi được nạp đầy đủ?
- 11. Hộp thoại Jquery - không phai mờ trước khi đóng
- 12. Magnific hành động Popup trước khi đóng cửa
- 13. HibernateException: Flush trong khi thác là nguy hiểm
- 14. Powershell stdout flush
- 15. Khi nào tôi nên gọi flush() trên SQLAlchemy?
- 16. javax.jms.MessageConsumer treo trên nhận khi người tiêu dùng đóng
- 17. mysql - FLUSH TABLE cần thiết?
- 18. Bạn có thể kích hoạt sự kiện trong JavaScript trước khi người dùng đóng cửa sổ không?
- 19. Có đọc từ stdin flush stdout không?
- 20. PHP flush() không hoạt động với laravel?
- 21. Văn bản cao cấp 2 Lỗi Tra cứu dấu phẩy trước khi đóng ngoặc đơn
- 22. Hibernate: Refresh, Evict, Replicate and Flush
- 23. Phát hiện cửa sổ bật lên trước khi người dùng đăng nhập
- 24. PHP buffer ob_flush() so với flush()
- 25. printf flush tại lối ra chương trình
- 26. Đóng/hủy phiên khi trình duyệt hoặc tab bị đóng
- 27. ResultSet không đóng khi kết nối đóng?
- 28. Cách đóng ứng dụng theo chương trình khi người dùng chạm vào nút
- 29. hiện gần() ngụ ý flush() trong Python?
- 30. Android - Ngăn người dùng đóng ứng dụng
Câu hỏi này có thể giúp bạn một chút [xem này] [1] [1]: http://stackoverflow.com/questions/7300676/when-to-use-flush-in- java –
@Siva: 'theo Javadoc'. Trích dẫn và liên kết, hoặc nó không tồn tại. Theo như tôi biết, * một số * triển khai luồng sẽ tuôn ra khi đóng, trong khi những người khác thì không. Làm chứng minh cho tôi sai nếu đó không phải là trường hợp và Javadoc nói khác đi. – haylem
Cùng một câu hỏi như haylem. Tôi đọc qua tài liệu Java API của một vài lớp và một số nói rằng 'flush()' được gọi trong 'close()' trong khi những người khác không đưa ra nhận xét nào như vậy. Bất kỳ liên kết? –