2011-03-18 120 views
0

目前,我們的應用程序使用套接字輸入和輸出流進行通信。在具體的例子中,它從控制檯輸入流中讀取並寫入套接字輸出流。如果套接字輸入從外部關閉,但寫入被阻止,則輸出流不能關閉,從而導致掛起。使用NIO的Java套接字通信

因此,我想在循環中使用一些輪詢,其中(控制檯)輸入流定期輪詢以檢測它是否關閉並因此關閉輸出流。

根據this article它看起來像我必須採取SocketChannel s而不是inputstream和outputstream。輸入流和輸出流是否已解耦,因此我可以先用SocketChannel對輸入流進行嘗試,並將輸出流代碼保持原樣?

回答

0

SocketChannel具有完全不同的使用模型,而不是套接字。 但是你當然可以打開SocketChannel並使用write(...)方法發送數據。

的SocketChannel允許非阻擋網絡調用(所以它是非常可伸縮的),它是在打開的連接(較少的CPU開銷)更便宜。