IO向NIO的转变:单线程IO(阻塞问题)->引入多线程,创建多个socket(性能浪费)-->引入线程池,进行IO相关操作再拿IO线程进行IO操作
Java NIO:可以非阻塞的使用IO
核心组成部分:Channels(通道),Buffers(缓冲区),Selectors(选择器);
其他组件,Pipe,FileLock
一.Channel
Channel和Buffer,所有IO在NIO中都从一个Channel开始,Channel有点像流,
二.Buffer
缓冲区,在内存中开启的一段连续空间(数组)0,用来临时存放数据,解决了BIO中无法针对某个点有针对性处理
NIO学习笔记-Buffer基础三.Selector
Selector允许单线程处理多个Channel,如果要使用Selector,得向Selector注册Channel,然后调用select()方法.这个方法会一直阻塞到摸个注册的通道有事件就绪(包括新连接进来,数据接收等),一旦这个方法返回,线程就可以处理这个事件
![](https://i-blog.csdnimg.cn/blog_migrate/1a0d46f6d6a4c4a67a6091d42c22c66c.png)
在NIO中虽然IO是非阻塞的,但selector()方法是阻塞的
四.不同的Channel
//TODO
资料来源:
NIO官方文档:http://tutorials.jenkov.com/java-nio/index.html
并发编程网:ifeve.com/overview/