Tôi có một số BufferedReader
(được tạo bởi new BufferedReader(new InputStreamReader(process.getInputStream()))
). Tôi khá mới với khái niệm về một BufferedReader
nhưng như tôi thấy nó, nó có ba trạng thái:Làm cách nào để xác định trạng thái chính xác của BufferedReader?
- Một dòng đang chờ đọc; gọi
bufferedReader.readLine
sẽ trả lại chuỗi này ngay lập tức. - Luồng đang mở, nhưng không có dòng nào chờ đọc; gọi
bufferedReader.readLine
sẽ treo chuỗi cho đến khi một dòng có sẵn. - Luồng đã bị đóng; gọi số
bufferedReader.readLine
sẽ trả về giá trị rỗng.
Bây giờ tôi muốn xác định trạng thái của BufferedReader
, để tôi có thể xác định liệu tôi có thể đọc an toàn từ nó mà không cần treo ứng dụng của mình hay không. Quá trình cơ bản (xem ở trên) nổi tiếng là không đáng tin cậy và vì vậy có thể đã treo; trong trường hợp này, tôi không muốn ứng dụng máy chủ của mình bị treo. Vì vậy, tôi đang thực hiện một loại thời gian chờ. Tôi đã cố gắng để làm điều này đầu tiên với luồng nhưng nó đã phức tạp khủng khiếp.
Gọi BufferedReader.ready()
sẽ không phân biệt giữa các trường hợp (2) và (3) ở trên. Nói cách khác, nếu ready()
trả về false, có thể là luồng chỉ đóng (nói cách khác, quy trình cơ bản của tôi đã đóng một cách duyên dáng) hoặc có thể là quy trình cơ bản đã treo.
Vì vậy, câu hỏi của tôi là: làm cách nào để xác định ba trạng thái nào trong số ba trạng thái này của tôi là BufferedReader
nằm trong thực tế mà không gọi số readLine
? Rất tiếc, tôi không thể chỉ gọi số readLine
để kiểm tra điều này vì ứng dụng của tôi sẽ bị treo.
Tôi đang sử dụng phiên bản JDK 1.5.
Nhân tiện, tôi giả định rằng thời điểm quá trình cơ bản của tôi không thể treo ở giữa một dòng .... mặc dù đó có thể là một giả định sai lầm, nó đã không xảy ra cho đến nay trong khi thử nghiệm và tôi đã có đủ các vấn đề khác !! – Kidburla
N.B. Tôi hiện đang tìm kiếm các tùy chọn khác hơn là luồng. Vấn đề là ứng dụng của tôi không hoạt động vào lúc này (vì một số lý do bao gồm readLine) và tôi thấy các chủ đề rất khó gỡ lỗi, đặc biệt nếu chúng đang hết thời gian chờ. – Kidburla