Tôi đã nhìn thấy hai câu trả lời trên SO cho rằng các lớp học PipedInputStream
và PipedOutputStream
do Java cung cấp là thiếu sót. Nhưng họ không giải thích về những gì đã xảy ra với họ. Họ có thực sự thiếu sót, và nếu như vậy theo cách nào? Tôi hiện đang viết một số mã sử dụng chúng, vì vậy tôi muốn biết liệu tôi có đang rẽ sai hay không.Sai sót với PipedInputStream/PipedOutputStream
One answer nói:
PipedInputStream
vàPipedOutputStream
bị hỏng (đối với luồng). Họ cho rằng mỗi cá thể được gắn với một chuỗi cụ thể. Đây là kỳ quái.
Đối với tôi, điều đó dường như không kỳ quái và cũng không bị hỏng. Có lẽ tác giả cũng đã có một số sai sót khác trong tâm trí?
Another answer nói:
Trên thực tế họ đang tránh tốt nhất. Tôi đã sử dụng chúng một lần trong 13 năm và tôi ước gì tôi đã không.
Nhưng tác giả đó không thể nhớ lại vấn đề là gì.
Giống như tất cả các lớp và đặc biệt là các lớp được sử dụng trong nhiều chủ đề, bạn sẽ gặp sự cố nếu bạn lạm dụng chúng. Vì vậy, tôi không xem xét không thể đoán trước "write end dead" IOException
rằng PipedInputStream
có thể ném là một lỗ hổng (không close()
kết nối PipedOutputStream
là một lỗi; xem bài viết Whats this? IOException: Write end dead, bởi Daniel Ferbers, để biết thêm thông tin). Lỗ hổng khác được yêu cầu là gì?
http://stackoverflow.com/questions/484119/why-doesnt-more-java-code-use-pipedinputstream-pipedoutputstream loại bao quát nó. Họ không thực sự "thiếu sót", chỉ cần một chút khôn lanh và cũng thường là một mùi mã đăng nhập, nếu bạn chắc chắn 100% bạn cần chúng và rằng không có lỗi trong thiết kế, không có vấn đề thực sự với việc sử dụng chúng ... – TC1
Giao diện nhanh như tôi muốn sử dụng. Đó là ít nhất "Dưới nổi bật" là chủ đề đọc không thực sự chờ đợi cho các chủ đề viết để viết yêu cầu đọc đầy đủ, và hủy bỏ với ngoại lệ EOF nếu người viết đóng nó vv Nó có xử lý chủ đề rất nguyên thủy và đồng bộ hóa, và yêu cầu bộ đệm lớn như yêu cầu đọc lớn nhất. – peterk