什么是选择器

选择器的作用是完成IO的多路复用。一个通道代表一条连接通路,通过选择器可以同时监控多个通道的IO(输入输出)状况。选择器和通道的关系,是监控和被监控的关系。

使用

重要的成员

Selector --选择器类
selector.open() --获取Selector实例
SelectionKey --选择键类,包含被选中的I/O事件及各种属性(通道,状态....)

可监控类型

(1)可读:SelectionKey.OP_READ

(2)可写:SelectionKey.OP_WRITE

(3)连接:SelectionKey.OP_CONNECT

(4)接收:SelectionKey.OP_ACCEPT

注意: 这些类型不是说正在做,而是说可以做,而且,并不是所有通道都有这四种类型

使用流程

获取选择器实例

Selector selector = Selector.open();

注册通道

注意: 1. 不是所有的通道都能注册,只有继承了SelectableChannel才行,FileChannel就不行

2.连接,读写操作都是I/O事件

//用这个方法注册
// sel-- 你自己创建的选择器实例
// ops-- 选择监听这个通道的事件
// att-- 一般用于传入某一个Handle对象,便于后期回调
public final SelectionKey register(Selector sel, int ops, Object att)

处理

//调用select()方法找到监听事件
selector.select();
//由于不只一个I/O事件,所以我们获取迭代器遍历
Iterator<SelectionKey> it = selector.selectedKeys().iterator();
//判断该事件的种类,从而做出相应处理
if(sk.isXxxx()){ }

NIO三大组件之Selector选择器的更多相关文章

  1. NIO三大组件简介

    NIO简介 NIO 是面向缓冲区(或者说面向块)编程的, 因为Buffer底层本质上就是内存块.数据被读取到一个缓冲区, 稍后再被它处理, 需要时数据可在缓冲区前后移动, 从而增加了处理过程中的灵活性 ...

  2. NIO - 三大组件

    NIO 概述 NIO有三个核心组件: 通道(Channels) 缓存(Buffers) 选择器(Selectors) 实际上,NIO的组件和类远不止这三个,但这个三个组件是核心.至于其它组件,例如Pi ...

  3. 第一章 java nio三大组件与使用姿势

    本案例来源于<netty权威指南> 一.三大组件 Selector:多路复用器.轮询注册在其上的Channel,当发现某个或者多个Channel处于“就绪状态”后(accept接收连接事件 ...

  4. Java NIO 三大组件之 Buffer

    NIO大三组件 之Buffer 一.什么是Buffer Buffer是用于特定原始类型的数据的容器. 它的实质就是一组数组,用于存储不同类型的数据. 二.缓冲区的类型 缓冲区类型除了Boolean值类 ...

  5. Java NIO 三大组件之 Channel

    Java NIO 之 Channel 一.什么是Channel Channel用于源节点(例如磁盘)与目的节点的连接,它可以进行读取,写入,映射和读/写文件等操作. 在Java NIO中负责缓冲区中数 ...

  6. NIO三大组件之Buffer

    什么是Buffer Buffer(这里并不是特指Buffer类)是一个存储数据的容器,与数组类似(其实底层依旧是用数组的结构来存储数据),但不同的是,Buffer对象提供了一组更有效的方法去进行写入和 ...

  7. Netty学习笔记(1)NIO三大组件

    1. Channel channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前 ...

  8. NIO组件 Selector(选择器)

    简介 使用Selector(选择器), 可以使用一个线程处理多个客户端连接. Selector 能够检测多个注册的通道上是否有事件发生(多个Channel以事件的方式可以注册到同一个Selector) ...

  9. 深入理解NIO(一)—— NIO的简单使用及其三大组件介绍

    深入理解NIO(一)—— NIO的简单使用及其三大组件介绍 深入理解NIO系列分为四个部分 第一个部分也就是本节为NIO的简单使用(我很少写这种新手教程,所以如果你是复习还好,应该不难理解这篇,但如果 ...

随机推荐

  1. 如何创建一个GETH节点(单节点,windows环境)

    所有命令都是在powershell上执行的 1.创建"创世块" 初始化配置 创建一个 hdgenesis.json文件,拷贝到geth根目录 {    "config&q ...

  2. Zabbix + Grafana 可视化

    Zabbix 自定义图形 Zabbix 自带图形 Zabbix 图形树安装 # 1.上传 [root@zabbix ~]# cd /usr/share/zabbix [root@zabbix zabb ...

  3. Chapter Zero 0.2.1 执行运算与判断的CPU

    目录 执行运算与判断的CPU CPU效能比较的指标 CPU的工作频率:外频与倍频 32位与64位的CPU与总线[宽度] CPU的等级 超线程(Hyper-Threading,HT) 网上摘下几张主板图 ...

  4. codeforces 1077D Cutting Out 【二分】

    题目:戳这里 题意:给n个数的数组,要求找k个数满足,这k个数在数组中出现的次数最多. 解题思路:k个数每个数出现次数都要最大化,可以想到二分下限,主要是正确的二分不好写. 附ac代码: 1 #inc ...

  5. leetcode 2 两数相加 考虑溢出

    先用int存了结果然后出错,int溢出了. 真是憨批嗷. 不用考虑保存结果,直接一位一位计算就行. 感觉被描述误导了. /** * Definition for singly-linked list. ...

  6. OAuth2授权流程

  7. 如何将 js 同步方法转换成异步方法

    如何将 js 同步方法转换成异步方法 // promise export const getUserToken = () => new Promise((resolve, reject) =&g ...

  8. Github App version released icons

    # Github App version released icons http://shields.io/ Build Travis: https://img.shields.io/travis/U ...

  9. js debounce & throttle All In One

    js debounce & throttle All In One debounce & throttle js 节流 防抖 debounce 防抖 防抖,是指一个事件触发后在单位时间 ...

  10. cache-control config & http cache storage location control

    cache-control config & http cache storage location control cache-control 设置 where is the storage ...