参考:http://blog.csdn.net/jiangwei0910410003/article/details/21104867
一。1.4以前面向流的io,nio面向块io。
核心对象:通道,缓冲区,选择器
nio中所有数据都是在缓冲区处理的。
抽象类buffer。
通道:实现channel接口
读数据分为以下三步:从fileinputStream获取channel,创建buffer,将数据从channel读取到buffer中。
写入数据:从fileinputStream获取channel,创建buffer,将数据从channel中写入到buffer中
二。缓冲区对象本质是一个数组。能够跟踪和记录缓冲区的变化情况。
position:下一个将要被写入或读取的元素索引
limit:需要多少数据需要读取和写入
capacity:存储在缓冲区中的最大数据容量
flip方法:设置limit,position为0
clear方法:所有状态复位
三。缓冲区分配
allocation包装为缓冲区对象
现有缓冲区对象创建子缓冲区。子缓冲区和现有缓冲区数据共享。相当于一个视图窗口。
调用slice方法可以创建一个子缓冲区
只读缓冲区:调用缓冲区的asReadonlyBuffer,将常规缓冲区转换为只读缓冲区。与原缓冲区共享数据。原缓冲区发生变化,只读缓冲区也变化
直接缓冲区:调用allocatedirect,调用底层操作系统io,避免中间缓冲区。
内存映射文件io:是文件的数据为内存数组,不是全映射,而是实际读取或写入才会映射。