目前,我们的应用程序使用套接字输入和输出流进行通信。在具体示例中,它从控制台输入流中读取并写入套接字输出流。如果套接字输入从外部关闭,但写入阻塞,则无法关闭输出流导致挂起。
因此我想在循环中使用一些轮询,其中定期轮询(控制台)输入流以检测它是否已关闭并因此关闭输出流。
根据this article,看起来我必须使用SocketChannel
而不是输入流和输出流。输入流和输出流是否已解耦,因此我可以首先使用SocketChannel
对输入流进行尝试,并保持输出流代码不变?
答案 0 :(得分:0)
SocketChannel具有完全不同的使用模型而不是套接字。 但是你当然可以打开SocketChannel并使用write(...)方法发送数据。
SocketChannel允许非阻塞网络调用(因此它具有很高的可扩展性),并且在打开连接时更便宜(更少的CPU开销)。