一、IO原理

1.底层原理

  • 操作系统在进行IO的时候,实际上并不是即时操作,它们是通过缓冲区的,也就是说,我们读写文件都是通过一个中介来进行的。读系统就是把内核缓存区的内容复制到进程缓冲区;写系统就是把进程缓冲区的内容复制到内核缓存区。
  • 之所以这样做的原因是避免大量的IO操作,大量的IO操作效率是很低的。这个过程并不等价于数据在内核缓冲区和磁盘之间的交换。
150.1
150.1

2.

  • NIO和IO的实现方式有所不同,NIO实在JDK1.4之后引入的,采用的是块的实现方式,而IO采用流的实现方式

3.提供了两套API实现方式

  • 标准输入输出的NIO
  • 网络编程的NIO

4.流与块的优缺点

  • 基于流的IO,速度慢,但是为流式数据提供过滤器
  • 基于块的IO,速度快,但是缺乏像流的雅兴和简单性

5.Buffer读取数据的步骤

  • 将数据读取到buffer之中(buffer会记录写入了多少数据)
  • 调用flip()方法(将buffer从写模式变成读模式)
  • 在buffer中读取数据
  • 调用clear()或者compact()方法(clear() 方法会清空整个缓冲区。compact() 方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。)

6.关于Channel

  • 对Channel的读写必须通过buffer
  • Channel是可以异步读写的
  • Channel是双向的,既可以读又可以写

7.NIO中的Channel有如下几种

  • FileChannel,文件中读取数据
  • DatagramChannel,读写UDP网络协议数据
  • SocketChannel,读写TCP网络协议数据
  • SocketServerChannel,可以监听TCP网络协议数据

二、源码:

posted on 2021-12-13 00:13  心悦君兮君不知-睿  阅读(141)  评论(0编辑  收藏  举报