“关于:Java网络IO编程(BIO、NIO、AIO)”的版本间差异
跳到导航
跳到搜索
小 (Eijux移动页面关于:BIO、NIO、AIO至关于:Java应用BIO、NIO、AIO,不留重定向) |
无编辑摘要 |
||
第2行: | 第2行: | ||
== 关于 == | == 关于 == | ||
本文主要讨论 Java 实现 network IO 的三种实现:BIO、NIO、AIO。 | |||
=== 什么是 BIO、NIO、AIO? === | |||
* 见:“'''[[关于:5种I/O模型]]'''” | |||
# BIO:“blocking IO”,阻塞IO; | |||
# NIO:“non-blocking IO”,非阻塞IO; | |||
# AIO:“asynchronous IO”,异步IO; | |||
=== Java 的 NIO API === | |||
* 见:“'''[[关于NIO]]'''”(概念、组件、用法) | |||
需要注意的是: | |||
* Java NIO 是“'''Java New IO API'''”,而非“Non-Blocking IO”。二者不是一个概念。 | |||
** Java NIO 支持'''面向缓冲区的、基于通道的IO'''操作,以更加高效的方式进行文件的读写操作。 | |||
* 其 NIO API 既可以实现“Non-Blocking IO”(NIO)和“Asynchronous IO”(AIO),也可以实现“Blocking IO”(BIO)。 | |||
== BIO示例 == | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
== NIO示例 == | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
== AIO示例 == | |||
<pre> | |||
AIO 是 Java 1.7 之后引入的包,是 NIO 的升级版本,新增了提异步非阻塞的 IO 操作方式,所以人们叫它 AIO(Asynchronous IO),异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会执行回调通知相应的线程进行后续的操作。 | |||
</pre> | |||
在Java 7中增加了asynchronous IO,具体结构和实现类框架如下: | |||
: [[File:Java NIO:AsynchronousChannel类结构.png|400px]] | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="java" highlight=""> | <syntaxhighlight lang="java" highlight=""> | ||
</syntaxhighlight> | </syntaxhighlight> |
2021年5月13日 (四) 22:46的版本
关于
本文主要讨论 Java 实现 network IO 的三种实现:BIO、NIO、AIO。
什么是 BIO、NIO、AIO?
- 见:“关于:5种I/O模型”
- BIO:“blocking IO”,阻塞IO;
- NIO:“non-blocking IO”,非阻塞IO;
- AIO:“asynchronous IO”,异步IO;
Java 的 NIO API
- 见:“关于NIO”(概念、组件、用法)
需要注意的是:
- Java NIO 是“Java New IO API”,而非“Non-Blocking IO”。二者不是一个概念。
- Java NIO 支持面向缓冲区的、基于通道的IO操作,以更加高效的方式进行文件的读写操作。
- 其 NIO API 既可以实现“Non-Blocking IO”(NIO)和“Asynchronous IO”(AIO),也可以实现“Blocking IO”(BIO)。
BIO示例
NIO示例
AIO示例
AIO 是 Java 1.7 之后引入的包,是 NIO 的升级版本,新增了提异步非阻塞的 IO 操作方式,所以人们叫它 AIO(Asynchronous IO),异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会执行回调通知相应的线程进行后续的操作。
在Java 7中增加了asynchronous IO,具体结构和实现类框架如下: