我想在写一个字符串byebye
后关闭Java非阻塞套接字通道。但是,非阻塞模式下的方法会立即返回,因此调用close()
可能会导致正在进行的写入操作抛出ClosedChannelException
。
我可以想到2个解决方法:
“在使用选择器注册之前,必须将通道置于非阻塞模式,并且在取消注册之前可能不会返回到阻止模式”
代码:
String msg = "byebye";
channel.write(ByteBuffer.wrap(msg.getBytes()));
channel.close();
答案 0 :(得分:1)
调用close()可能会导致正在进行的写操作抛出一个 ClosedChannelException。
不,不会。 write()方法抛出该异常。一旦write()方法退出,就不能抛出它。数据保留在内核的套接字输出缓冲区中以便写入。