<
java NIO
>
上一篇

java基础小笔记
下一篇

git常用命令

java NIO(New IO)

1.可以替代IO的一种新的IO API。

2.IO基于字节流和字符流操作,而NIO则基于通道(Channels)和缓冲区(Buffers)

3.IO:在读、写的过程中,当前线程一直是阻塞状态的不可用的;

NIO:当前读写操作时,线程没有阻塞,可以先处理其他事情,之后线程可以继续操作他。

4.NIO又叫非阻塞(Non- blocking)IO,当线程将数据从通道读取到缓冲区时,线程可以处理其他事情,当数据写入到缓冲区时,线程可以继续处理他。从缓冲区写入到通道也类似。

5.选择器(Selectors),可以检测多个通道的事件(数据到达,通道打开等),因此单个线程可以监听多个数据通道。

Channel(通道)和Buffer(缓冲区)

基本上所有的IO在NIO中都从一个Channel开始。Channel有点类似像流,可以将数据从通道中读取至缓冲区中,或者将数据从缓冲区写入到通道中。图示:

image

Selector

在一个单线程中使用一个Selector处理3个Channel,如图:

image

使用selector,需要在selector注册Channel,然后调用它的select()方法。

这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子如:新连接进来,数据接收等。

Buffer(缓冲区)

(1)在java NIO 中,buffer用于和通道交互。数据从通道读入到缓冲区,从缓冲区写入到通道中。

(2)缓冲区本质是一块可以写入数据的,并且从中读取数据的内存。这块内存被包装成 NIO 的buffer对象,提供一系列方法,方便访问该内存。

Top
Foot