Java IO模型

  IO即input,out,也就是输入输出。java中的IO模型主要有BIO,BIO,AIO三种。

BIO(Blocking I/O)

  BIO顾名思义阻塞型IO。运行模型为 :应用程序发出IO请求,操作系统响应请求,准备数据,拷贝数据,请求结束。

java的ioc是什么 java ioc是什么模式_数据

  这种方式存在的问题在应用程序发出IO请求之后,不知道操作系统什么时候可以完成请求操作,为保证请求总传递过来的数据流能够接收到,应用程序在发出IO请求后时刻等待着,也就是线程阻塞等待。等到请求完成后,线程才可以执行其他操作。

  为此,在数据流之间添加一个缓冲区,当内核数据准备好之后可以先将数据传送到缓冲区中,这样数据就不会丢失,应用程序也就可以进行其他操作,这种思想也就是接下来的NIO

NIO(Non-blocking/New I/O)

  NIO即非阻塞型IO,在数据流中添加了缓存区,但存在的问题是应用程序如何读取其中的数据呢,这其中提供了一个chanel通道,数据可通过chanel流向应用程序。

  怎么读取缓冲区的问题解决了,什么时候进行读取缓冲区,于是就有一个selector选择器。selet选择器可以实时监听缓存区中数据是否需要读取。

  那为什么叫做selector?原因在于NIO采用了IO多路复用,也就是一个select可以监听多个缓冲区,这种场景非常类似于聊天中的接收消息。一个人用户可以同时和多个用户进行聊天,每一个用户发送的消息都可以看作是一个缓冲区中的数据,select看作消息提示界面,检查缓冲区中有没有数据,用户发现有消息就点击消息进去消息读取界面也就是IO数据读取。

  基于上面描述,就有了新的IO模型

java的ioc是什么 java ioc是什么模式_数据_02

  值得注意的是,NIO添加了缓冲区,这就促使与BIO一次读取数据的大小不同,NIO基于缓冲区块为单位,BIO基于字节或者字符为单位。

AIO

  AIO 也就是 NIO 2,即异步型IO,这种工作方式类似于操作系统中的中断的工作方式。发出IO请求,操作系统内核接收到之后回复收到,然后就去准备数据,处理数据,这个时候应用程序就可以去执行其他任务。当内核准备好数据的时候,就去通知应用程序数据好了,应用程序就去接收数据。IO模型如下

java的ioc是什么 java ioc是什么模式_java的ioc是什么_03