Java NIO(New IO),也可理解为Non Blocking IO(非阻塞式IO)。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO相对于IO在对文件的读写上更加高效。
NIO与IO的区别:
IO | NIO |
---|---|
面向流(Stream Oriented) | 面向缓冲区(Buffer Oriented) |
阻塞IO(Blocking IO) | 非阻塞IO(Non Blocking IO) |
- | 选择器(Selectors) |
注:阻塞和非阻塞是针对于网络IO而言的,即Socket。
传统的IO是单向的,基于流(Stream)的,传输的是字节数据,即byte[]:
NIO是双向的,基于通道(Channel)的。通过通道建立连接,然后操作缓冲区传输数据和对数据进行处理。通道相当于铁路,缓冲区相当于火车,光有通道是不能完成数据传输的,还得有缓冲区,缓冲区可以在通道中双向传输数据: