在Java中,NIO读写是I/O的基本过程。 从通道读取:创建一个缓冲区,然后请求通道读取数据。通道写入:创建一个缓冲区,填充数据,并要求通道写入数据。
读写操作的核心部件:
- Channels
- Buffers
- Selectors
Java NIO还有其它更多的组件和类,但是Channel,Buffer和Selector用作API的核心。
通道和缓冲区
读取操作:
数据写入操作:
通道列表:
在Java NIO中,主要使用的通道如下:
- DatagramChannel
- SocketChannelFile
- ChannelServer
- SocketChannel
上述通道涵盖UDP(用户数据报协议)+ TCP(传输控制协议)网络I/O和文件I/O。
缓冲列表
- CharBuffer
- DoubleBuffer
- IntBuffer
- LongBuffer
- ByteBuffer
- ShortBuffer
- FloatBuffer
上述缓冲区覆盖了通过I/O发送的基本数据类型:characters,double,int,long,byte,short和float。
选择器
Java NIO提供了“选择器”的概念。这是一个可以用于监视多个通道的对象,如数据到达,连接打开等。因此,单线程可以监视多个通道中的数据。如果应用程序有多个通道(连接)打开,但每个连接的流量都很低,则可考虑使用它。 例如:在聊天服务器中。下面来看看线程使用选择器来处理3个通道,如下图所示: