NIO类库的简介

缓冲区Buffer

Buffer是一个对象,该类是个抽象类,主要包含一些要写入或者要读出的数据。在INO类库中加入Buffer对象,体现了新库与原来的I/O的区别。

在NIO库中,所有的数据都是用缓冲区处理的。在读取数据时,它是直接读取到缓冲区中的,在写入数据时,写入到缓冲区中。任何时候该访问NIO中的数据,都是通过缓冲区进行操作。

缓冲区实质上是一个数组,通常是一个byteBuffer。一个缓冲区不仅仅是一个数组,缓冲区还提供了对数据的结构化访问以及维护读写位置等信息。

通道Channel

channel是一个通道,网络数据通过channel进行读写。通道和流的不同之处在于通道是双向的,流只是在一个方向上移动,而通道可以用于读写或者二者的同时进行。

channel是全双工的,所以它可以比流更好的映射底层操作系统的API.

主要分为两大类:

    用于网络读写的selectablechannel

    用于文件操作的filechannel

    serversocketchannel和socketchannel都是selectablechannel的子类

多路复用器selector

它是Java NIO编程的基础。

selector会不断地轮询注册在其上的channel,如果某个channel上发生了读或者写的事件,这个channel就处于就绪状态,会被selector轮询出来,然后通过selectionkey可以获取就绪channel的集合,在进行后续的I/O操作。

一个多路复用器selector可以同时轮询多个channel,由于jdk使用;了epoll()代替传统的select实现,所以它并没有限制最大链接句柄。一个线程负责selector的轮询,就可以介入成千上万的客户端。

猜你喜欢

转载自blog.csdn.net/wildwolf_001/article/details/81069324
今日推荐