NIO----Channer,Buffer,selector

Channer,Buffer,selector

1. Channel(通道)

Channel与传统的InputStream、OutputStream最大区别在于:

Channel提供了map()方法,可以直接把"一块数据"映射到内存,将Channel对应的部分或全部数据映射成ByteBuffer.
如果说传统的输入输出系统面向流的处理,Channel倾向于面向块的处理。

2.Buffer

Buffer 本质是一个数组,发送到Channel中的所有对象必须放到Buffer中,从Channel读取数据的时候也是把数据放到Buffer中,然后从Buffer中读取。常用子类是ByteBuffer.

buffer:三个重要概念:容量(capacity),界限(limit)和位置(position)

1、容量:缓冲区的容量表示该Buffer的最大数据容量,(最多可以存储多少数据)

2、界限:不应该被读出或者写入的缓冲区位置,位于limit后的数据既不可被读,也不可被写。

3、位置:下一个被读出的或者被写入的缓冲区位置索引。如果从channel中读取了1个数据到Buffer中,position为1.

从Buffer中访问数据时,分为相对和绝对两种:(put()和get()方法)

1、相对:从Buffer的当前position处开始读取或写入数据,然后将position的值按处理袁术的个数增加

2、绝对:直接根据索引来向Buffer中访问数据类似数组根据下标来访问数据。 不会影响position的值

3. Selector(选择器)

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。
使用Selector来实现一个单独的线程可以管理多个channel,从而管理多个网络连接。
好处是只需要更少的线程来处理通道,只需要更少的线程来处理通道。
Selector管理多个channel的结构图:

NIO----Channer,Buffer,selector

学习参考
Java NIO核心概念总结篇
https://blog.****.net/pcwl1206/article/details/82996973

NIO系列 Channel、Buffer和Selector