1:首先彻底理解阻塞和异步
- 第一阶段:数据准备,等待磁盘数据准备好再读取到内核缓冲区;
- 第二阶段:数据拷贝,将数据从内核拷贝到进程中;
- IO Model的区别就是在两个阶段上各有不同的情况。
是否阻塞说的是第一个阶段,即等待数据准备阶段是否会阻塞;
是否同步说的是第二阶段,即将数据从内核拷贝到进程这个真实的IO操作阶段是否阻塞;
阻塞IO、非阻塞IO、IO复用、信号驱动的IO这四种模型都是同步IO模型因为他们四个的区别(阻塞与非阻塞)就在与第一步是否完成后才返回,但第二步都需要当前进程去完成.异步IO呢,就是从第一步开始就返回,直到第二步完成后才会返回一个消息,也就是说,非阻塞能够让你在第一步时去做其它的事情,而真正的异步IO能让你第二步的过程也能去做其它事情。
2:五种IO模型
3:Java IO(传统的IO,阻塞IO模型—>同步阻塞)
- Java IO流学习总结一:输入输出流
- Java IO流学习总结二:File
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
- Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
- Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream
- Java IO流学习总结七:Commons IO 2.5-FileUtils
- Java IO流学习总结八:Commons IO 2.5-IOUtils
4:NIO(JDK1.4的NIO,IO复用模型—>同步非阻塞)
5:Java AIO(JDK1.7的IO,异步IO模型—>异步非阻塞)
6:Java IO 和 NIO的区别
- 1:IO面向字节流 ,NIO面向缓冲区,比如文件的FileChannel;
- 2:IO是阻塞的,基于Selector的NIO是非阻塞,ServerSocketChannel;
- 3:IO是同步的,JDK1.7的NIO2(AIO)是异步的.