Tôi có một DataInputStream
mà tôi nhận được từ một số Socket
. Có cách nào để tôi có thể đặt thời gian chờ cho dis.read(...)
không? Hiện nay tôi sinh ra một chủ đề mới để đọc. Trong khi chuỗi chủ đề thực hiện thread.join(timeout)
để chờ trước khi ngắt. Tôi biết về nio, nhưng tôi không nghĩ rằng tôi muốn refactor nhiều vào thời điểm này. Cảm ơn.Tôi có thể đặt thời gian chờ cho chức năng read() của InputStream không?
7
A
Trả lời
14
Không có trên InputStream nói chung, nhưng bạn có thể sử dụng Socket#setSoTimeout(int)
để đặt thời gian chờ cho tất cả các hoạt động đọc trên chính ổ cắm.
Các vấn đề liên quan
- 1. Tôi có thể đặt thời gian chờ cho UdpClient trong C# không?
- 2. Tôi có thể đặt toàn bộ thời gian chờ của kết nối HTTP không?
- 3. Đặt thời gian chờ cho winsock recvfrom
- 4. thực hiện chức năng với thời gian chờ
- 5. Chức năng hết thời gian chờ nếu mất quá nhiều thời gian để hoàn thành
- 6. đặt thời gian chờ cho đầu vào của người dùng
- 7. Đặt thời gian chờ của ổ cắm?
- 8. Đặt thời gian chờ để đọc stdin
- 9. ASIHTTPRequest đặt thời gian chờ
- 10. Có chức năng Scala chuẩn nào để chạy một khối với thời gian chờ không?
- 11. Thời gian chờ cho BackgroundWorker
- 12. Thời gian chờ của Faraday
- 13. Tôi có thể đặt thời gian mặc định cụ thể cho trường datetime Django không?
- 14. Có thể kiểm tra thời gian chờ trên jQuery.post() không?
- 15. WGET có hết thời gian chờ không?
- 16. Đặt thời gian chờ trên URL.openStream() Android
- 17. Đặt thời gian chờ để phẫu thuật
- 18. Cách đặt thời gian chờ cho dataWithContentsOfURL: url
- 19. HttpURLCài đặt thời gian chờ kết nối
- 20. Hủy chức năng không đồng bộ tĩnh với thời gian chờ
- 21. Đặt thời gian chờ của Curl trong PHP
- 22. đặt thời gian chờ cho socket nhận được
- 23. Đặt thời gian chờ của ổ cắm trên kênh netty
- 24. Cách đặt thời gian chờ trong recvmmsg()?
- 25. Đang chờ người dùng nhập vào với thời gian chờ
- 26. Nhận SocketTimeoutExceptions sử dụng loopj AsyncHttpClient ... có giá trị thời gian chờ nào tôi có thể đặt không?
- 27. Thời gian chờ của máy chủ SQL
- 28. Có cách nào để đặt thời gian chờ phản hồi cho Indy Tidhttp không?
- 29. openssl ssl_connect blocks mãi mãi - cách đặt thời gian chờ?
- 30. feedparser với thời gian chờ
Ah cảm ơn, tôi đã bỏ lỡ điều đó. Câu hỏi duy nhất của tôi là: lần này xuất hiện để đếm cho mỗi lần read() được gọi, có thể là nhiều lần. Có cách nào tôi có thể thiết lập toàn bộ thời gian timeout như vậy mà nó sẽ timeout nếu tổng của mỗi đọc() vượt quá thời gian chờ? – Zombies
Không tự động, nhưng bạn có thể đặt thời gian chờ S0 ngắn hơn thời gian chờ thực và kiểm tra vòng lặp nếu bạn đã vượt quá tổng thời gian chạy được phép của mình. – jarnbjo
Hãy cẩn thận với việc sử dụng thời gian chờ của ổ cắm và DataInputStream cùng nhau (và cũng là một BufferredInputStream). Chúng sẽ đệm hoặc đọc một số dữ liệu vào bộ nhớ tạm thời (như trong getLong()) và sau đó nếu thời gian chờ xảy ra (chờ thêm dữ liệu từ ổ cắm), bạn sẽ mất bất kỳ dữ liệu đã đọc trước đó và * không có cách nào để khôi phục * . SocketTimeoutException mở rộng InterruptedIOException, cung cấp số byte được chuyển thành công trước khi hết thời gian chờ. Với một socket thô, bạn có thể sử dụng nó để thử lại/tiếp tục (có lẽ để xóa thông điệp xấu). –