一、NIO介绍
- 在JDK 1.4中引入了NIO,可以最大限度的满足Java程序I/O的需求
- java.nio包:定义了各种与Buffer相关的类
- java.nio.channel包:包含与Channel和Selector相关的类型
- java.nio.charset包:与字符集相关的类
- 在NIO中有三大核心组件:Buffer、Channel、Selector
二、传统IO和NIO对比
- 传统IO
① 是面向流的,每次可以从流中读取一个或多个字节,只能向后读取,不能向前移动
② 是线程阻塞的,在调用read()/write()方法读写数据时,线程阻塞,直到数据读取完毕或者数据完全写入,在读写过程中,线程不能做其他的任务 - NIO
① 是面向缓冲区的,把数据读到一个缓冲区中,可以在缓冲区中向前/向后移动,增加了程序的灵活性
② 在NIO中,所有的数据都需要通过Channel传输,通道可以直接将一块数据映射到内存中
③ Channel是双向的,不仅可以读取数据,还能保存数据。程序不能直接读写Channel通道,Channel只与Buffer缓冲区交互
④ 是线程不阻塞的,当线程从Channel中读取数据时,如果通道中没有可用的数据,线程不阻塞,可以做其他的任务