NIO就绪处理之OP_WRITE
Posted zhouhl_cn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NIO就绪处理之OP_WRITE相关的知识,希望对你有一定的参考价值。
写就绪相对有一点特殊,一般来说,你不应该注册写事件。写操作的就绪条件为底层缓冲区有空闲空间,而写缓冲区绝大部分时间都是有空闲空间的,所以当你注册写事件后,写操作一直是就绪的,选择处理线程全占用整个CPU资源。所以,只有当你确实有数据要写时再注册写操作,并在写完以后马上取消注册。
当有数据在写时,将数据写到缓冲区中,并注册写事件。
public void write(byte[] data) throws IOException
writeBuffer.put(data);
key.interestOps(SelectionKey.OP_WRITE);
注册写事件后,写操作就绪,这时将之前写入缓冲区的数据写入通道,并取消注册。
channel.write(writeBuffer);
key.interestOps(key.interestOps() & ~SelectionKey.OP_WRITE);
以上是关于NIO就绪处理之OP_WRITE的主要内容,如果未能解决你的问题,请参考以下文章
Java网络编程——NIO处理写事件(SelectionKey.OP_WRITE)
Java网络编程——NIO处理写事件(SelectionKey.OP_WRITE)
Java网络编程——NIO处理写事件(SelectionKey.OP_WRITE)