#Java NIO简明教程二 NIO概览
Java NIO包含下面三个核心组件:
- 通道Channels
- 缓存Buffers
- 选择器Selectors
java nio有很多类和组件,但是在我看来channel,Buffer,selector是最核心的组件。像pipe,FileLock仅仅是用来配合这三个组件的工具类。因此本文会重点讲解这三个组件。其他的组件将会后续的文章中说明。
通道和缓存
通俗的说,所有的io操作在nio都需要使用channel.一个通道像一个字节流.数据能够从通道写入缓存,也能从缓存写入通道。看下图示例:
下面是channel的主要实现类:
- FileChannel(文件IO)
- DatagramChannel(UDP)
- SocketChannel(TCP)
- ServerSocketChannel(网络IO)
上面的通道包含了UDP,TCP 网络IO 和文件IO.
下面是一些缓存的实现类:
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
上面的实现类包含了你能使用的基本数据类型的缓存:byte,short,int,long,float,double,characters.
nio也提供了一个MappedByteBuffer能够处理大文件。
选择器
使用选择器可以使用单线程处理多个通道.如果你应用有非常多的数据量小的通道连接使用选择器是非常有用的,例如即时通讯服务。
下图展示了单线程处理三个通道:
当你使用selector时,你必须先注册通道到选择器,注册后你可以调用 select()
方法。这个方法将一直阻塞直到通道有事件到达,当方法返回时,线程可以处理事件,例如:连接到达,数据到达。