之前讲到,Channel注册到Selector,Selector如何实现接收到对应的事件去通知对应的Channel呢?
当然是要底层落地实现的,我们以windows平台实现类WindowsSelectorImpl为例,两个内部类FdMap和MapEntry
FdMap
/保存文件描述符和SelectionKey的映射关系
MapEntry
在向Selector注册Channel时,有这样一条语句:this,fdMap.put(var1) 其实就是将
分析
1, 两个入参
var1.channel.getFDVal()), 拿到ChannelImpl的文件描述符ID
new WindowsSelectorImpl.MapEntry(var1),创建一个MapEntry对象,属性绑定SelectionKeyImpl
因为FdMap就是一个HashMap类,所以就是绑定了文件描述符ID和mapEntry对象。