java NIO简介

java NIO中包含下面三个核心组件

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

除了上面的三个,NIO中还有其他的组件。但是Channels,Buffers,Selectors是Api中的核心组件,剩下的组件像Pile和FileLock可以看做是上面的三个核心组件的共同工具类。所以,这里主要是针对上面的三个核心组件,其他的非核心组件可以去其他教程去学习。

Channels and Buffers

很明显,NIO中的IO都是从Channels组件开始的。通道(Channels)和IO中流的概念是相似的,可以从Channel中读取数据到Buffer中,数据也可以成Buffer中写入到Channel中,可以参见下图
java NIO简介
这里有一些不同类型的Channel和Buffer,下面是java NIO中的Channel实现
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
正如你所看到的,这些Channels主要涵盖了UDP+TCP网络IO,文件IO。
还有一些和上面的类有关有意思的接口,但是为了简单起见。NIO简介就不提及了,后来会和大家一起学习。
这是JavaNIO中的Buffer实现列表

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

这些Buffer涵盖了你可以在io中发送的数据类型像 byte, short, int, long, float, double and characters。
java NIO 中还有一个MappedByteBuffer ,他是用来处理内存映射文件的,这里就不再赘述了。

Selectors

一个Selector可以处理多个Channels,如果你的应用需要打开多个连接,但是每个连接传递很少的数据。就像聊天服务器。NIO用来处理这种情况还是很方便的。
下面是开启一个线程来使用一个Selector来处理三个Channels。
java NIO简介
为了使用Selector,你需要注册Channels,然后调用select()方法。这个方法将会堵塞直到有一个注册的Channel准备就绪。一旦select()返回,当前线程就能处理像新增连接,接收数据等事件。

原文链接

Java NIO Overview