NIO学习--介绍

  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,能够替代标准的Java IO API。其主要组成的元素有:

  |--buffer       :负责在创建好的通道(channel)中搬运的数据
       |--ByteBuffer         不一样类型的缓冲区
       |--CharBuffer
       |--DoubleBuffer ...
  |--channel    :源与目标链接的通道,不作数据传输
      |--FileChannel                文件io
      |--DatagramChannel      UDP io
      |--SocketChannel           TCP io
      |--ServerSocketChannel  TCP io
  |--Selectors   : 选择器用于监听多个通道的事件,所以,单个的线程能够监听多个数据通道。线程

  • 与传统io的区分:

1. nIo是面向缓冲区, io是面向流事件

2.Java IO的各类流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据彻底写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,可是它仅能获得目前可用的数据,若是目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,因此直至数据变的能够读取以前,该线程能够继续作其余的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不须要等待它彻底写入,这个线程同时能够去作别的事情。 线程一般将非阻塞IO的空闲时间用于在其它通道上执行IO操做,因此一个单独的线程如今能够管理多个输入和输出通道(channel)。 it

3. selectors 的加入Java NIO的选择器容许一个单独的线程来监视多个输入通道,你能够注册多个通道使用一个选择器,而后使用一个单独的线程来“选择”通道:这些通道里已经有能够处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。io

相关文章
相关标签/搜索