Java nio 基础概念笔记

 

Channel:

ServerSocketChannel 创建服务器端Socket,监听某特定端口,接收客户端请求。

SocketChannel 用于描述在一个客户端连接,既可以是发起请求的客户端本身的连接,也可以在表示该请求在服务器端与之对应的SocketChannel连接对象。几乎所有的数据读写操作都在这个类中完成。可以有block和nonblock两种方式。

 

 

ByteBuffer:

ByteBuffer分为两种,一种为direct,一种为Nondirect. 使用direct buffer时JVM会分配一个连续的内存块,直接通过native access mothed进行读写操作。而nondirect buffer时,JVM通过数组访问的方式来访问其中数据。在Channel对Buffer进行操作时,最终只操作direct buffer。如果Channel接收到的是一个nondirect buffer,它会创建一个direct buffer,然后将nondirect buffer中的数据拷贝到这个direct buffer中,然后调用系统方法进行读写。


Selector:
Selector 用于管理Channel,通过select轮循注册在该Selector上的所有Channel,并负责dispatch事件。
Selector扮演了Reactor的角色。每个SelectableChannel向Selector注册感兴趣的事件,当事件发生时,Selector记录并跟踪这些事件。当应用程序调用Selector的select方法时,Selector轮循所有注册过的SelectableChannels,查看是否有它们感兴趣的事件发生。 一个SelectableChannel可以向不同的Selector中注册不同的事件。每种类型的SelectableChannel所能注册的事件也不一样。各Channel能注册的事件如下表:
ServerSocketChannel OP_ACCEPT
SocketChannel OP_CONNECT, OP_READ, OP_WRITE
DatagramChannel OP_READ, OP_WRITE
Pipe.SourceChannel OP_READ
Pipe.SinkChannel OP_WRITE

channel和selector的主要类结构图:

Java nio 基础概念笔记
 

Java nio 基础概念笔记
 

你可能感兴趣的:(java,nio)