什么是NIO?

NIO是java1.4后提出的概念,之前的IO都是阻塞的,比如读取文件,读取线程必须需要等到文件读完才可以返回,但是采用NIO,IO线程不必等待文件的读取,在读取过程中可以去干其他的事情。

NIO核心组件

  • Channels:通道
  • Buffers:缓冲区
  • Selectors:选择器

    Channels & Buffers

    数据可以从Channel读到Buffer(内存),也可以从Buffer(内存)写回到通道中。
    image.png

    常用的Channels

  • FileChannel(文件)

  • DatagramChannel(网络,UDP)
  • SocketChannel(网络,TCP,客户端)
  • ServerSocketChannel(网络,TCP,服务器)

    常用的Buffers

  • ByteBuffer

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

    选择器

    image.png
    选择器允许单个线程处理多条通道,Selector有一个阻塞的方法select()当注册的通道都没有数据时,其阻塞,当有通道返回事件,其不阻塞。

    总结

    image.png