标签:
Java的NIO(New IO)是不同于旧IO的,旧的IO是基于字节流和字符流的,是阻塞的IO。NIO是基于通道(Channel)和缓冲区(Buffer)的,是非阻塞的IO。
使用旧IO每次读取一行数据流的流程图如下,Thread必须等待,等待readline读到一行的数据并返回。
使用NIO,可以周期判断Buffer中是否有数据,没有数据时还可以去做其它的事情。
NIO可以使用单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。
如果有少量的连接使用非常高的带宽,一次发送大量的数据,旧IO模型实现可能非常契合。
NIO的核心组成部分:Channel、Buffer和Selector。
选择器(Selector)用于监听多通道中的事件。
Channel的主要实现:
Buffer的主要实现:
Buffer中还有一个特殊的类型:MappedByteBuffer,用于实现内存映射。
向Selector注册Channel,然后调用它的select()方法,这个方法会一直阻塞到通道中事件的发生,如新建连接、数据接收等。
标签:
原文地址:http://www.cnblogs.com/lnlvinso/p/4541709.html