码迷,mamicode.com
首页 > 其他好文 > 详细

NIO基础篇(一)

时间:2015-05-31 12:22:00      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

 1.NIO与传统IO的比较

  Java的NIO(New IO)是不同于旧IO的,旧的IO是基于字节流和字符流的,是阻塞的IO。NIO是基于通道(Channel)和缓冲区(Buffer)的,是非阻塞的IO。

  使用旧IO每次读取一行数据流的流程图如下,Thread必须等待,等待readline读到一行的数据并返回。

  技术分享

   使用NIO,可以周期判断Buffer中是否有数据,没有数据时还可以去做其它的事情。

  技术分享  

  NIO可以使用单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。

   技术分享

  如果有少量的连接使用非常高的带宽,一次发送大量的数据,旧IO模型实现可能非常契合。

  技术分享

 2.Channel、Buffer和Selector

  NIO的核心组成部分:Channel、Buffer和Selector。

  选择器(Selector)用于监听多通道中的事件。

 技术分享

  Channel的主要实现: 

  • FileChannel 
  • DatagramChannel   数据管道
  • SocketChannel 
  • ServerSocketChannel

  Buffer的主要实现: 

  • ByteBuffer 
  • CharBuffer 
  • DoubleBuffer 
  • FloatBuffer 
  • IntBuffer 
  • LongBuffer 
  • ShortBuffer

  Buffer中还有一个特殊的类型:MappedByteBuffer,用于实现内存映射。

  技术分享

  向Selector注册Channel,然后调用它的select()方法,这个方法会一直阻塞到通道中事件的发生,如新建连接、数据接收等。

  

NIO基础篇(一)

标签:

原文地址:http://www.cnblogs.com/lnlvinso/p/4541709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!