2011-03-18 77 views
0

目前,我们的应用程序使用套接字输入和输出流进行通信。在具体的例子中,它从控制台输入流中读取并写入套接字输出流。如果套接字输入从外部关闭,但写入被阻止,则输出流不能关闭,从而导致挂起。使用NIO的Java套接字通信

因此,我想在循环中使用一些轮询,其中(控制台)输入流定期轮询以检测它是否关闭并因此关闭输出流。

根据this article它看起来像我必须采取SocketChannel s而不是inputstream和outputstream。输入流和输出流是否已解耦,因此我可以先用SocketChannel对输入流进行尝试,并将输出流代码保持原样?

回答

0

SocketChannel具有完全不同的使用模型,而不是套接字。 但是你当然可以打开SocketChannel并使用write(...)方法发送数据。

的SocketChannel允许非阻挡网络调用(所以它是非常可伸缩的),它是在打开的连接(较少的CPU开销)更便宜。