加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

架构师常识储蓄——深入领略BIO、NIO、AIO

发布时间:2019-10-18 21:06:57 所属栏目:建站 来源:咔咔侃技术
导读:本文你将获取到:同/异步 + 阻/非阻塞的机能区别;BIO、NIO、AIO 的区别;领略和实现 NIO 操纵 Socket 时的多路复用;同时把握 IO 最底层最焦点的操纵能力。 BIO、NIO、AIO 的区别是什么? 同/异步、阻/非阻塞的区别是什么? 文件读写最优雅的实现方法是什么? N
副问题[/!--empirenews.page--]

本文你将获取到:同/异步 + 阻/非阻塞的机能区别;BIO、NIO、AIO 的区别;领略和实现 NIO 操纵 Socket 时的多路复用;同时把握 IO 最底层最焦点的操纵能力。

  • BIO、NIO、AIO 的区别是什么?
  • 同/异步、阻/非阻塞的区别是什么?
  • 文件读写最优雅的实现方法是什么?
  • NIO 怎样实现多路复用成果?

带着以上这几个题目,让我们一路进入IO的天下吧。

架构师常识储蓄——深入领略BIO、NIO、AIO

在开始之前,我们先来思索一个题目:我们常常所说的“IO”的全称到底是什么?

也许许多人看到这个题目和我一样一脸懵逼,IO的全称着实是:Input/Output的缩写。

一、IO 先容

我们凡是所说的 BIO 是相对付 NIO 来说的,BIO 也就是 Java 开始之初推出的 IO 操纵模块,BIO 是 BlockingIO 的缩写,顾名思义就是阻塞 IO 的意思。

1.1 BIO、NIO、AIO的区别

BIO 就是传统的 java.io 包,它是基于流模子实现的,交互的方法是同步、阻塞方法,也就是说在读入输入流可能输出流时,在读写举措完成之前,线程会一向阻塞在哪里,它们之间的挪用时靠得住的线性次序。它的有点就是代码较量简朴、直观;弱点就是 IO 的服从和扩展性很低,轻易成为应用机能瓶颈。

NIO 是 Java 1.4 引入的 java.nio 包,提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 措施,同时提供了更靠近操纵体系底层高机能的数据操纵方法。

AIO 是 Java 1.7 之后引入的包,是 NIO 的进级版本,提供了异步非堵塞的 IO 操纵方法,以是人们叫它 AIO(Asynchronous IO),异步 IO 是基于变乱和回调机制实现的,也就是应用操纵之后会直接返回,不会堵塞在哪里,当靠山处理赏罚完成,操纵体系会关照响应的线程举办后续的操纵。

1.2 全面熟悉 IO

传统的 IO 大抵可以分为4种范例:

  • InputStream、OutputStream 基于字节操纵的 IO
  • Writer、Reader 基于字符操纵的 IO
  • File 基于磁盘操纵的 IO
  • Socket 基于收集操纵的 IO

java.net 下提供的 Scoket 许多时辰人们也把它归为 同步阻塞 IO ,由于收集通信同样是 IO 举动。

java.io 下的类和接口许多,但概略都是 InputStream、OutputStream、Writer、Reader 的子集,全部把握这4个类和File的行使,是用好 IO 的要害。

1.3 IO 行使

接下来看 InputStream、OutputStream、Writer、Reader 的担任相关图和行使示例。

1.3.1 InputStream 行使

担任相关图和类要领,如下图:

架构师常识储蓄——深入领略BIO、NIO、AIO

InputStream 行使示例:

  1. InputStream inputStream = new FileInputStream("D:log.txt"); 
  2. byte[] bytes = new byte[inputStream.available()]; 
  3. inputStream.read(bytes); 
  4. String str = new String(bytes, "utf-8"); 
  5. System.out.println(str); 
  6. inputStream.close(); 

1.3.2 OutputStream 行使

担任相关图和类要领,如下图:

架构师常识储蓄——深入领略BIO、NIO、AIO

OutputStream 行使示例:

  1. OutputStream outputStream = new FileOutputStream("D:log.txt",true); // 参数二,暗示是否追加,true=追加 
  2. outputStream.write("你好,老王".getBytes("utf-8")); 
  3. outputStream.close(); 

1.3.3 Writer 行使

Writer 担任相关图和类要领,如下图:

架构师常识储蓄——深入领略BIO、NIO、AIO

Writer 行使示例:

  1. Writer writer = new FileWriter("D:log.txt",true); // 参数二,是否追加文件,true=追加 
  2. writer.append("老王,你好"); 
  3. writer.close(); 

1.3.4 Reader 行使

Reader 担任相关图和类要领,如下图:

架构师常识储蓄——深入领略BIO、NIO、AIO

Reader 行使示例:

  1. Reader reader = new FileReader(filePath); 
  2. BufferedReader bufferedReader = new BufferedReader(reader); 
  3. StringBuffer bf = new StringBuffer(); 
  4. String str; 
  5. while ((str = bufferedReader.readLine()) != null) { 
  6.  bf.append(str + "n"); 
  7. bufferedReader.close(); 
  8. reader.close(); 
  9. System.out.println(bf.toString()); 

二、同步、异步、阻塞、非阻塞

上面说了许多关于同步、异步、阻塞和非阻塞的观念,接下来就详细聊一下它们4个的寄义,以及组合之后形成的机能说明。

2.1 同步与异步

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读