写NIO程序的时候遇到了SelectionKey.attachment()为空的问题,最后解决了,这里简单介绍下,希望能对其他人有帮助:
SelectionKey key = socketChannel.register(selector, SelectionKey.OP_CONNECT);
key.attach(group);
...
client.register(selector, SelectionKey.OP_READ);
if(key.isReadable()){
ChannelWorkerGroup group = (ChannelWorkerGroup) key.attachment();
的时候却报group为空。
原因是第二次register为OP_READ的时候没有带上第三个参数,改成这样就好了:
client.register(selector, SelectionKey.OP_READ, group);
if(key.isReadable()){
ChannelWorkerGroup group = (ChannelWorkerGroup) key.attachment();
分享到:
相关推荐
即需要采用SelectionKey.cancel()从注册的Selector中取消对该Selection的监视,防止同时多个线程获取到SelectionKey的事件 2.注册在向Selector注册通道的时候,如果register方法抛出KeyCancelledException表明,...
s = "Att: " + (sk.attachment() == null ? "no" : "yes"); s += ", Read: " + sk.isReadable(); s += ", Acpt: " + sk.isAcceptable(); s += ", Cnct: " + sk.isConnectable(); s += ", Wrt: " + sk.is...
channel.register(selector, SelectionKey.OP_CONNECT); } /** * 采用轮询的方式监听selector上是否有需要处理的事件,如果有,则进行处理 * @throws IOException * @throws InterruptedException */...
SelectionKey key = r_channel.register(selector, SelectionKey.OP_READ); buf.clear(); File file = null; FileOutputStream fout = null;//文件输出流对象 RandomAccessFile raf = null;//创建临时文件对象 ...
NIO其核心概念包括Channel,Selector,SelectionKey,Buffer.
选择器(Selectors) 选择键(SelectionKey) 示例:简易的客户端服务器通信 集合 集合框架总览 -、Iterator Iterable ListIterator 二、Map 和 Collection 接口Map 集合体系详解 HashMap LinkedHashMap TreeMap ...
2.客户端发送数据包请求到服务端,服务端将请求的SelectionKey压入“读消息生产者队列”,立即进入下一批Select 3.读消息消费者线程池中派遣一个就绪线程从客户端读取数据包DataPacket,并触发onReaded事件 4.开发...
用Java实现非阻塞通信 java.nio包提供了支持非阻塞通信的类,主要包括: ● ServerSocketChannel:ServerSocket的替代类,支持阻塞通信与非...selected-keys集合中,就表示与这个SelectionKey对象相关的事件发生了。
AbstractSelectionKey is the base implementation class for selection keys. It implements validation and cancellation methods.
- 选择键(SelectionKey) - 示例:简易的客户端服务器通信 - 总结 Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 ...
NIO网络编程 Selector选择器 进行监听,是新连接或已经连接,读写数据 ...返回当前内部集合保存的所有selectionKey selectionKey 表示Selector与网络通道直接的关系 int OP_ACCEPT; 16 需要连接 int OP_C
NioSocket中服务端的处理过程可以分为5部: 1) 创建ServerSocketChannel,...4) Selector接收到请求后使用selectedKeys返回SelectionKey集合 5) 使用SelectionKey 获取Channel、Selector 和操作类型并进行操作。
Selector类似一个调度中心,所有Channel都需要注册到选择器中,并绑定一个SelectionKey,绑定时还会指定要监听的事件,如:连接就绪、读就绪、写就绪等。可以调用Selector提供的API实现对发生监听事件的连接进行处理...
1. NIO完成网络编程 1.1 Selector选择器老大 Selector ... 监听所有注册通道,存在IO流操作是,会将对应的信息SelectionKey存入到内部的集 合中,参数是一个超时时间 public Set selectionKeys();
NIO完成网络编程 1. Selector——选择器老大 ... 监听所有注册通道,存在IO流操作是,会将对应的信息SelectionKey存入到内部的集合中,参数是一个超时时间 public Set selectionKeys(); 返回当前Se