1,NIO
1.1 概念
NIO英文全称New IO是从Java 1.4版本开始引入的一组新的 API,主要目的是基于这组新的API来改善传统IO的操作性能。
其核心包括: Buffers,Channels,Selectors 三个核心部分
1.2 IO的过程
对于一个network IO (以read为例),它会涉及到两个系统对象,一个是调用这个IO的process,另一个就是系统内核(kernel)。
当一个发生read操作时,该操作会经历两个阶段:
- 将数据拷贝到操作系统内核Buffer
- 将操作系统内核数据拷贝到用户进程
这就是IO的两个核心阶段,但是采用的API不同,读写效率则不同. 传统IO处理读写业务时真的高效吗?
2,IO和NIO的对比
2.1 面向流与面向缓冲区
IO和NIO之间第一个最大的区别是:IO是面向流的,NIO是面向缓冲区的
2.1.1 面向流
IO属于面向流的操作,输入、输出流操作是单向的
2.1.2 面向缓冲区
NIO属于面向缓冲区的操作,输入、输出操作是双向且可移动指针,灵活性更强