在1.4版本之前,java的IO类库是阻塞IO,从1.4版本之后引入了新的异步IO库,被称为java new IO库,简称 java NIO。而将旧的阻塞Java IO 称为OIO。
NIO和OIO的区别:
- OIO面向流,NIO面向缓冲区
- OIO是阻塞的,NIO为非阻塞的
- OIO没有选择器的概念,NIO有选择器概念
NIO核心三组件:
- Channel(通道):类似于OIO输入流和输出流的结合体,既可以从通道写入,也可以从通道读取
- Buffer (缓冲区):通道的读取是从通道读取到缓冲区,通道的写入是从缓冲区写入到通道
- Selector(选择器):把通道注册到选择器,然后通过选择器的内部机制,可以查询这些注册的通道是否有已经就绪的IO事件