-
核心类
NIO核心
Channel:通道
Buffer:缓冲区
Selector:选择器或多路复用器
其中:
channel是信息传输的通道,是jdk NIO中对输入输出方法的另一种抽象,类比IO中的流,与流不同之处在于,channel具有双向性,而流是单向传输的,一个流必须是InputStream或OutputStream的子类,而通道可以用于读写或二者同时进行。channel可以工作在非阻塞模式下,构成NIO的基础。在NIO中,操作channel的唯一方式是使用buffer,通过buffer操作channel,实现数据块的传输。
channel的实现:
1. 文件类:FileChannel,用于对文件的读写
2. UDP类:DatagramChannel, 用于UDP的数据读写
3. TCP类:ServerSocketChannel/SocketChannel,用于TCP的数据读写
查看全部 -
非阻塞式I/O模型
弹性伸缩能力强
单线程节省资源
查看全部 -
NIO 网络编程模型
====创建连接===
1.注册建立连接事件(Selector)
2.客户端发起连接请求
3.服务端接收请求,启动建立连接事件处理器(Acceptor Handler)
4.Acceptor Handler创建与客户端的连接
5.Acceptor Handler响应客户端建立连接请求
6.Acceptor Handler向Selector注册连接可读事件====处理流===
7.Client发起请求
8.Selector启动连接读写处理器(Read&Write Handler)
9.Read&Write Handler处理与Client的读写业务
10.Read&Write Handler响应Client的请求
11.Read&Write Handler向Selector注册连接可读事件查看全部 -
BIO网络模型缺点
阻塞式I/O模型
弹性伸缩能力差
多线程耗资源
查看全部 -
BIO缺点:
每次客户端请求就会生成一个线程,在大量的并发的情况下,接入的服务端过多,就会出现问题。1千个请求,创建一千个线程
查看全部 -
BIO模型:阻塞同步IO
过程:
1. 服务端启动,开始建立监听客户端的连接请求;
2. 客户端启动,向服务器端发起建立连接请求;
3. 服务器在收到客户端的请求后,将会创建一个新的线程;
4. 服务端新创建的线程会与客户端建立socket连接,用于响应客户端的请求,通知客户端连接
查看全部 -
NIO :Non-blocking I/O(非阻塞IO) 或者New I/O
JDK1.4开始有的
查看全部 -
开发环境!
查看全部 -
NIO编程实现步骤
第一步:创建Selector
第二步:创建ServerSocketChannel,并绑定监听端口
第三步:将Channel设置为非阻塞模式
第四步:将Channel注册到Selector上,监听连接事件
第五步:循环调用Selector的select方法,检测就绪情况
第六步:调用selectedKeys方法获取就绪channel集合
第七步:判断就绪事件种类,调用业务处理方法
第八步:根据业务需要决定是否再次注册监听事件,重复执行第三步操作
查看全部 -
SelectionKey 选择键
四种就绪状态常量:连接就绪、接受就绪、读就绪、写就绪
查看全部 -
Selector的使用方法
查看全部 -
Selector 选择器/多路复用器
作用:I/O就绪选择
地位:NIO网络编程的基础
查看全部 -
Buffer:缓冲区,它提供唯一与channel进行交互的方式,作用是读写channel中的数据。Buffer从本质上说是一块内存区域,它是一块可以写入数据,读取数据的内存。
Buffer的属性
Capacity:分配的buffer容量,一旦写入的最大字节数超过这个容量,需要将其清空之后,才能继续往里面写数据
Position:当前操作的位置,初始值为0,最大值:容量值-1
Limit:上限,写模式下等于Capacity,读模式下等于最多能读取的数据
Mark:标记,记录mark的位置,调用reset方法时position会回到mark的位置
查看全部 -
Channel的使用
查看全部 -
NIO核心
Channel:通道
Buffer:缓冲区
Selector:选择器或多路复用器
其中:
channel是信息传输的通道,是jdk NIO中对输入输出方法的另一种抽象,类比IO中的流,与流不同之处在于,channel具有双向性,而流是单向传输的,一个流必须是InputStream或OutputStream的子类,而通道可以用于读写或二者同时进行。channel可以工作在非阻塞模式下,构成NIO的基础。在NIO中,操作channel的唯一方式是使用buffer,通过buffer操作channel,实现数据块的传输。
channel的实现:
1. 文件类:FileChannel,用于对文件的读写
2. UDP类:DatagramChannel, 用于UDP的数据读写
3. TCP类:ServerSocketChannel/SocketChannel,用于TCP的数据读写
查看全部
举报