@wxf
2018-01-24T10:24:47.000000Z
字数 680
阅读 686
面试系列
NIO可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。
IO | NIO |
---|---|
面向流(输入流、输出流) | 面向缓冲区(将数据存储到缓冲区中然后利用管道进行数据的传输) |
阻塞IO | 非阻塞IO |
(无) | 选择器 |
allocate() # 获取缓冲区
put() # 存入数据到缓冲区中
get() # 获取缓冲区的数据
flip() # 切换到读取数据的模式
rewind() # 可重复读数据
clear() # 清空缓冲区,可是缓冲区的数据依然存在,但是处于“被遗忘”状态,即位置界限等数据变为了初始状态。
缓冲区的4个核心属性:
capacity:容量,表示缓冲区中最大存储数据的容量。一旦声明不能改变。
limit:界限,表示缓冲区中可以操作数据的大小。(limit后数据不能进行读写)
position:位置,表示缓冲区中正在操作数据的位置。
mark:标记,表示记录当前position的位置。可以通过reset()恢复到mark的位置
# 4者的关系:0 <= mark <= position <= limit <= capacity