NIO的本质就是避免原始的TCP建立连接使用的3次握手的操作,减少网络开销。
NIO
new IO 或 non-block IO
jdk1.4出现
linux 多路复用技术(select模式) 实现IO事件的轮询方式同步非阻塞的模式
重要的几个概念
Buffer 缓冲区
在NIO库中,所有数据都是用缓冲区处理的
Channel管道
网络数据通过Channel读取和写入。
分为两类:
SelectableChannel网络读写。子类:
SocketChannel
ServerSocketChannel
FileChannel文件读写。
通道和流的对比。
通道:双向的。既能读,又能写。
流:只能在一个方向上移动。
Selector选择器、多路复用器
当IO事件(Channel)注册到Selector后,Selector会给每个Channel分配一个key。
不断的轮询注册在其上的通道Channel。如果某个Channel发生了读写操作,则这个Channel就处于就绪状态,被Selector轮询出来以后,然后通过SelectionKey取得就绪的Channel集合,并进行后续操作。
一个Selector可以负责成千上万的Channel,没有上限[JDK使用epoll代替传统的select实现的],只需要一个线程负责Selector的轮询即可。
图示说明:
1. Client端的SockerChannel注册到Server端的Selector上。
2. Selector轮询所有的注册通道,根据通道状态[Connect连接状态、Accept阻塞状态、Read可读状态、Write可写状态],执行对应的操作。
举例一:实现客户端和服务端的单向通信。
Server.java
package com.asiainno.utils;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
public class Server implemen

最低0.47元/天 解锁文章
NIO特点、实现客户端和服务端的单双向通信&spm=1001.2101.3001.5002&articleId=78352315&d=1&t=3&u=2e1c7807abc6417aa99c027de75d4b8b)
361

被折叠的 条评论
为什么被折叠?



