Java nio 基础概念笔记

本文深入探讨了NIO框架的关键组件,包括ServerSocketChannel、SocketChannel、ByteBuffer和Selector等。介绍了如何利用ServerSocketChannel监听端口并接收客户端请求,以及SocketChannel在客户端连接中的作用。此外,还详细解释了ByteBuffer的不同类型及其工作原理,并阐述了Selector如何管理和调度各种Channel。

 

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能注册的事件如下表:
ServerSocketChannelOP_ACCEPT
SocketChannelOP_CONNECT, OP_READ, OP_WRITE
DatagramChannelOP_READ, OP_WRITE
Pipe.SourceChannelOP_READ
Pipe.SinkChannelOP_WRITE

channel和selector的主要类结构图:


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值