• 参考资料:https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html

主要概念:

  • 通道(channel)
  • 缓冲区(buffer)

主要思想:

  • 在原来的IO的思想上封装,提高IO效率

方法:

  • 通过缓冲区实现基于块的读写

具体:

先获得文件的输入输出流–>从文件的输入输出流获得通道(channel) –>分配缓冲区(buffer)–>从缓冲区中读取内容/将内容写入缓冲

缓冲区内部细节:

缓冲区的底层实现可以看成是一个字节数组,

三个变量

  • position:当前索引,也可以理解为指针所指的元素,初始值为0,指向第一个元素
  • limit:初始值为capacity,通过与position以clear函数和flip函数结合来确定写入写出的元素.
  • capacity:总容量,可以理解为数组长度,limit<=capacity

  • flip函数 1.将limit设置为position的值 2.将position设置为0 将buffer写入到输出通道时,调用此函数,注意在写入到输出通道时(foutchanel.write(buffer)), position会步进,而limit不变,所以想要循环读取时,需要调用clear函数重置缓冲区的状态.

  • clear函数 1.将limit设置为capacity的值 2.将position设置为0

  • 文件输入输出流会记住输入输出的位置,每个字节仅能被读取一次.