Netty-----NIO核心组件及原理

什么是NIO?
java.nio全称java non-blocking IO(实际上是 new io),是指JDK 1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。

NIO三大核心组件

选择器 Selector
Selector 是 Java NIO 的一个组件,它用于监听多个 Channel 的各种状态,用于管理多个 Channel。

通道 Channel
Channel是一个对象,可以通过它读取和写入数据。可以把它看做IO中的流。但是它和流相比还有一些不同:
Channel是双向的,既可以读又可以写,而流是单向的.
Channel可以进行异步的读写.
对Channel的读写必须通过buffer对象.

在Java NIO中Channel主要有如下几种类型:

FileChannel:从文件读取数据的
DatagramChannel:读写UDP网络协议数据
SocketChannel:读写TCP网络协议数据
ServerSocketChannel:可以监听TCP连接

缓存区 Buffer
Buffer 是所有具体缓存区的基类,是一个抽象类,它的实现类有很多,包含各种类型数据的缓存。

ByteBuffer
CharBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
MappedByteBuffer

Buffer 中有几个重要的成员属性

private int mark = -1;    // 标记
private int position = 0; //位置,下一个要被读取或写的元素的索引,每次读写缓冲区数据时都会改变该值,为下次读写作准备
private int limit;        //表示缓冲区当前的终点,不能对缓冲区超过极限的位置进行读写操作,且极限是可以修改的
private int capacity;     //容量,及可以容纳的最大数据量,在缓冲区创建时被设定并且不能被修改
long address;

在这里插入图片描述
NIO组件之间的关系:
1.Selector选择器对应一个线程,一个线程对应多个Channel(连接)
2.每一个Channel都对应一个buffer
3.Buffer就是一个内存块,底层是一个数组
4.程序切换到哪一个Channel是由事件决定的,Event就是一个重要的概念/
5.Selector会根据不同的事件,在各个通道上切换.
6.数据的读取写入是是通过Buffer,通过flip方法进行切换实现双向操作,这与BIO有本质不同的,BIO是通过单向流input输入流或output输出流直接写入到通道中
7.Channel也是双向的
在这里插入图片描述
常用API
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值