java nio

1.应用场景

IO可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。 
如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。同样,如果你需要维持许多打开的连接到其他计算机上,如P2P网络中,使用一个单独的线程来管理你所有出站连接,可能是一个优势。

有关Android NIO的精髓主要用于高负载的Socket网络传输,相对于传统I/O模型的Socket传输方式的优势,我们已经在 Android开发进阶之NIO非阻塞包(一) 中讲到了,这里不再赘述,一起来看看Android NIO有关Socket操作提供的类吧:

2.NIO的方式

1)通道和缓冲区(channels  buffers):NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

2)异步IO:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。

3)Selectors选择器:选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

4.channels的实现

1)FileChannel:只工作于阻塞模式

2)DatagramChannel

3)SocketChannel

4)ServerSocketChannel

5.Buffer的实现

1) ByteBuffer

2)CharBuffer

3)DoubleBuffer

4)FloatBuffer

5)IntBuffer

6)LongBuffer

7)ShortBuffer

6.selector实现

Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。 

原文地址:https://www.cnblogs.com/zhengtu2015/p/4882115.html