`

SelectionKey.attachment() returns null

 
阅读更多

写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();
 
分享到:
评论

相关推荐

    NIO-实践-多线程实例

    即需要采用SelectionKey.cancel()从注册的Selector中取消对该Selection的监视,防止同时多个线程获取到SelectionKey的事件 2.注册在向Selector注册通道的时候,如果register方法抛出KeyCancelledException表明,...

    Java NIO原理和使用

     s = "Att: " + (sk.attachment() == null ? "no" : "yes");  s += ", Read: " + sk.isReadable();  s += ", Acpt: " + sk.isAcceptable();  s += ", Cnct: " + sk.isConnectable();  s += ", Wrt: " + sk.is...

    Java NIO 聊天室 JSwing

    channel.register(selector, SelectionKey.OP_CONNECT); } /** * 采用轮询的方式监听selector上是否有需要处理的事件,如果有,则进行处理 * @throws IOException * @throws InterruptedException */...

    Java网络编程-Socket-文件传输小案例

    SelectionKey key = r_channel.register(selector, SelectionKey.OP_READ); buf.clear(); File file = null; FileOutputStream fout = null;//文件输出流对象 RandomAccessFile raf = null;//创建临时文件对象 ...

    浅谈java中nio的使用方式

    NIO其核心概念包括Channel,Selector,SelectionKey,Buffer.

    Java 基础核心总结 +经典算法大全.rar

    选择器(Selectors) 选择键(SelectionKey) 示例:简易的客户端服务器通信 集合 集合框架总览 -、Iterator Iterable ListIterator 二、Map 和 Collection 接口Map 集合体系详解 HashMap LinkedHashMap TreeMap ...

    封装一套简单易于使用的流式异步通信框架,追求易于理解,方便使用.rar

    2.客户端发送数据包请求到服务端,服务端将请求的SelectionKey压入“读消息生产者队列”,立即进入下一批Select 3.读消息消费者线程池中派遣一个就绪线程从客户端读取数据包DataPacket,并触发onReaded事件 4.开发...

    用Java实现非阻塞通信

    用Java实现非阻塞通信 java.nio包提供了支持非阻塞通信的类,主要包括: ● ServerSocketChannel:ServerSocket的替代类,支持阻塞通信与非...selected-keys集合中,就表示与这个SelectionKey对象相关的事件发生了。

    T_mul_double_2addr_4.rar_The Keys

    AbstractSelectionKey is the base implementation class for selection keys. It implements validation and cancellation methods.

    Java IO 体系.md

    - 选择键(SelectionKey) - 示例:简易的客户端服务器通信 - 总结 Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 ...

    NIO网络编程

    NIO网络编程 Selector选择器 进行监听,是新连接或已经连接,读写数据 ...返回当前内部集合保存的所有selectionKey selectionKey 表示Selector与网络通道直接的关系 int OP_ACCEPT; 16 需要连接 int OP_C

    网站开发基础知识

    NioSocket中服务端的处理过程可以分为5部: 1) 创建ServerSocketChannel,...4) Selector接收到请求后使用selectedKeys返回SelectionKey集合 5) 使用SelectionKey 获取Channel、Selector 和操作类型并进行操作。

    基于Nio的多人聊天Demo

    Selector类似一个调度中心,所有Channel都需要注册到选择器中,并绑定一个SelectionKey,绑定时还会指定要监听的事件,如:连接就绪、读就绪、写就绪等。可以调用Selector提供的API实现对发生监听事件的连接进行处理...

    NIO实现网络聊天室

    1. NIO完成网络编程 1.1 Selector选择器老大 Selector ... 监听所有注册通道,存在IO流操作是,会将对应的信息SelectionKey存入到内部的集 合中,参数是一个超时时间 public Set selectionKeys();

    NIO完成网络编程

    NIO完成网络编程 1. Selector——选择器老大 ... 监听所有注册通道,存在IO流操作是,会将对应的信息SelectionKey存入到内部的集合中,参数是一个超时时间 public Set selectionKeys(); 返回当前Se

Global site tag (gtag.js) - Google Analytics