一、IO原理
1.底层原理
操作系统在进行IO的时候,实际上并不是即时操作,它们是通过缓冲区的,也就是说,我们读写文件都是通过一个中介来进行的。读系统就是把内核缓存区的内容复制到进程缓冲区;写系统就是把进程缓冲区的内容复制到内核缓存区。 之所以这样做的原因是避免大量的IO操作,大量的IO操作效率是很低的。这个过程并不等价于数据在内核缓冲区和磁盘之间的交换。
![150.1](https://img-blog.csdnimg.cn/dc02e1e243184be08f00c940620cf31f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA552_6YeM552_5rCU,size_20,color_FFFFFF,t_70,g_se,x_16)
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网络协议数据
二、源码:
CSDN:https://blog.csdn.net/weixin_44630050 博客园:https://www.cnblogs.com/ruigege0000/ 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流 1000.0