NIO简介
NIO是在JDK 1.4中引入的,其目的是为了提高速度。java NIO包含了三个中重要的核心组件:Channels,Buffers,Selectors。
Channels和Buffers
通常来说,在NIO中所有的IO都是以Channels开始的。
Channels和Streams有些类似。区别如下:
1.Channels是双向的,可读可写,Streams是单向的,一个流要么是读入流,要么是写入流。
2.Channels可以异步读写。
3.数据从Channels读到Buffers,从Buffers写到Channels
一些主要的Channel:
FileCannel:从文件中读取和写入数据
DatagramChannel:在网络中通过UDP读写数据
SocketChannel:在网络中通过TCP读写数据
ServerSocketChannel:监听到来的TCP连接,比如网络服务连接。
一些主要的Buffer:
ByteBuffer
CharBuffer
FloatBuffer
DoubleBuffer
IntBuffer
ShortBuffer
LongBuffer
MappedByteBuffer
可以看到对于基本数据类型都有相应的Buffer,最后一个MappedByteBuffer用在内存映射文件上。
Selectors
Selector允许一个线程管理多个Channel,在多Channel的情况下非常方便,比如聊天服务。示意图如下(搬运工):
要使用Selector需要在Channel上注册,然后调用select()方法,此方法会阻塞直到注册Channel有返回的事件。比如网络连接,
数据接收等。
具体关于这些组件的细节,后面会介绍。