Java IO、BIO、NIO、BIO
一、什么是IO/NIO:
IO:即BIO(Blocking IO);面向流的、同步阻塞式IO;(JDK1.4之前唯一的选择)
NIO:面向缓冲的、同步非阻塞式IO;三大核心部分:Selector、Channel(通道)、Buffer(缓冲区);(JDK1.4引进的,一般网络编程中用得较多)
AIO:异步非阻塞式IO;(JDK1.7引进,算较新的特性)
二、同步、异步、阻塞、非阻塞(分布式系统角度理解,较抽象):
同步异步 和 阻塞非阻塞并没有直接的关系。
同异步描述的是一种"消息机制";比如两个线程A,B,线程A请求线程B需要一些数据,然后B去给A拿数据去:(主被动关系)
1:同步机制下,线程A要定时去主动的问A数据拿来没有。
2:异步机制下,线程A请求完B,就不管了,B如果把数据拿来准备好了,由B来通知A来处理。
阻塞非阻塞:描述的是线程间请求时所处的一种状态:(能不能去做别的事)
1:阻塞:体现在A请求B,一直到到读取数据B的过程中,A线程被挂起(期间不能使用CPU),直到当前数据段获取完了。(一次while()的执行)。
2:非阻塞:体现在A请求到获取数据之间,A线程不会被挂起,从请求到准备好数据这个阶段,A可以离开去做其它事。
注:同步异步,一般我们从编程中的多线程的角度理解是:同步强调线程间的时序关系,A要在B完成后才能继续。异步则是指AB两个分工完成部分任务,两者无需关心前后完成的关系。
三、组合:
同步阻塞:Java传统的IO就是 同步阻塞,A请求B拿数据,然后A之后需要主动去询问B是否准备好了,到B准备好了数据并且A获取到了数据期间,A不能干别的事,直到A获取完数据。
同步非阻塞:Java中的NIO就是 同步非阻塞,A需要主动去询问B是否准备好了,与同步阻塞的区别在于,A询问B之间A可以不阻塞,A可以去做别的事。
异步阻塞:A请求B拿数据,然后A不需要主动去询问B是否准备好了,到B准备好了数据会通知A来获取,因为也是阻塞,A也不能干别的事,直到A获取完数据。(理论是这样,但现实中这样的应用应该不多。。)
异步非阻塞:Java中的AIO就是 异步非阻塞,A请求B拿数据,然后A不需要主动去询问B是否准备好了,到B准备好了数据会通知A来获取,因为是非阻塞,A第一次请求B去拿数据后,A可以去做别的了。
四:Java nio的好处(同步非阻塞):
整体结构使用了反应器的设计模式(Reactor):
参考:Reactor模式详解

在实际使用中,Java NIO的优点主要体现在高并发时,其中Selector充当请求和询问者的角色,Selector会和多个Channel绑定,询问哪个Channel准备好了,如果有监听到需要的事件,就执行对应的操作。
之前提到的 非阻塞时做别的事,在这里可以理解为Selector去询问完当前的Channel,它这时可以去询问其它的Channel,而不用守在一个Channel前直到处理完这个Channel的数据。
五、编程中的while()方法与阻塞:
阻塞与否不是体现在这里的while()方法,在while()执行时其它已经说明请求已经准备好了;
阻塞是体现在第一次讲求读取数据并执行IO中的read()\write()方法的过程,这个过程中线程A不能做别的事。
执行while()的日的是为了读取完想要的数据,while()执行了多少次,阻塞就发生了多少次。
可参考:
同步阻塞、同步非阻塞、异步阻塞、异步非阻塞(知乎第二个郭无心答案)
Java IO、BIO、NIO、BIO的更多相关文章
- [转帖]JAVA BIO与NIO、AIO的区别(这个容易理解)
JAVA BIO与NIO.AIO的区别(这个容易理解) https://blog.csdn.net/ty497122758/article/details/78979302 2018-01-05 11 ...
- BIO与NIO、AIO的区别(这个容易理解)
转自:http://blog.csdn.net/skiof007/article/details/52873421 BIO与NIO.AIO的区别(这个容易理解) IO的方式通常分为几种,同步阻塞的BI ...
- JAVA BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...
- 【转】JAVA BIO与NIO、AIO的区别
Java中IO的模型分为三种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. BIO[同步阻塞] 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个Ser ...
- BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个Serve ...
- [转帖] BIO与NIO、AIO的区别
培训里面讲的东西 自己查了下 啥意思,,, 转帖强化一下. http://blog.csdn.net/skiof007/article/details/52873421 IO的方式通常分为几种,同步 ...
- BIO与NIO、AIO的区别(转)
IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...
- 【1】BIO与NIO、AIO的区别
一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求 ...
- java.io中的System.in、 System.out和System.err
System.in, System.out, System.err这3个流同样是常见的数据来源和数据流目的地.使用最多的可能是在控制台程序里利用System.out将输出打印到控制台上. JVM启动的 ...
- java io 处理流,BufferdInputStream、BufferedWriter、BufferedReader
BufferdInputStream:读取helloworld.java helloworld.java: package io; public class HelloWorld { public s ...
随机推荐
- BZOJ1925 [Sdoi2010]地精部落 【dp】
题目 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- 【Educational Codeforces Round 49 (Rated for Div. 2) 】
A:https://www.cnblogs.com/myx12345/p/9843826.html B:https://www.cnblogs.com/myx12345/p/9843869.html ...
- 修路 BZOJ 4774
修路 [问题描述] 村子间的小路年久失修,为了保障村子之间的往来,法珞决定带领大家修路.对于边带权的无向图 G = (V, E),请选择一些边,使得1 <= i <= d, i号节点和 n ...
- Laravel 之Composer
Composer是php的依赖管理工具,不是包管理器. 安装方式: (1)Composer-Setup.exe Win操作系统.需FQ (2)composer.phar 通用安装方式.不需要FQ,wi ...
- 2017-10-23学大伟业Day1
T1 叉叉 题目名称 叉叉 程序文件名 cross 输入文件名 cross.in 输出文件名 cross.out 每个测试点时限 1秒 内存限制 128MB 测试点数目 10 每个测试点分值 10 是 ...
- Chrome 浏览器安装Vue插件方法 (十分详细)
博主最近在研究Vue,无奈新手想安装Chrome的Vue插件,整理下安装流程: 1.首先去github下载vue.zip文件插件(还有npm安装方法这里就不介绍了自行百度)下载地址:https://g ...
- Tar压缩文件
[root@test /root]# tar [-zxcvfpP] filename [root@test /root]# tar -N 'yyyy/mm/dd' /path -zcvf targ ...
- linux下二机制文件的查看和编辑
linux下很多命令都是二机制:/bin/下的各种命令---/bin/sh./bin/cat./bin/dmesg./bin/hostname等 如何查看这些二机制文件: xxd.hexdump 参考 ...
- 完整的MVC框架(前端、后台和数据库)
终于学完了数据库的连接,可以做一个完整的项目了,以前做的练习都没有关联到数据库,没法进行事务. MVC框架 先上图: 老师画的图,有点乱,但是大概意思还是可以理解. 这个练习是简单的存储一个学生读了哪 ...
- Python机器学习--回归
线性回归 # -*- coding: utf-8 -*- """ Created on Wed Aug 30 19:55:37 2017 @author: Adminis ...