java中的NIO,BIO,AIO
Posted 盖丽男
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的NIO,BIO,AIO相关的知识,希望对你有一定的参考价值。
IO,input和output,Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。
IO是什么?为什么需要IO?
java在1.4之前,提供的是BIO,也就是java.io包下的的东西,同步阻塞。
在1.4之后,提供了NIO(New IO),在java.nio包下,同步非阻塞。
在java7,提供了AIO,也在java.nio.channels包下,只不过新增了几个异步通道,异步非阻塞。
IO是啥
Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的。
可以看出来,IO主要是读写东西用的,至于读写的东西从哪来到哪去,并无具体限制,所以,我们可以从文件读:FileInputStream
,可以从管道读:PipedInputStream
等等。
没有IO会影响什么?
我是这么理解的,没有IO的java,相当于一个不能和外界沟通的程序,我们编写一个java程序,一般都需要输入输出,而IO就是帮助我们来和程序进行交互的通道,我们在键盘上的输入通过IO传输给程序,程序的输出通过显示屏展示给我们。
没有IO,java程序也就不可能做到网络编程,只能单机自己玩,因为它无法和其他程序进行通信。
IO可以用来做什么?
- 读写文件
- 接口调用
- 数据输出
- 网络IO通信
Tomcat和Jetty与IO啥关系
Jetty一开始也使用的BIO,随着版本更新升级了NIO,
socket和IO啥关系
我是这样理解的,IO是socket实现的一部分,socket负责把数据从别处取过来,IO负责读取过来的数据,而且一般讨论socket和IO,这个IO会是指linux的IO,而不是java的IO,毕竟java的IO其实也只是封装了linux的IO。
供参考:Linux常见IO模型
BIO,NIO,AIO都有相对应的socket实现。
不过这篇文章和我的理解有出入,我再研究下:AIO Socket 编程 原理篇
连接数据库和IO有关系吗?
java中,连接数据库一般都是用jdbc,jdbc的底层进行连接使用socket,socket一般都是阻塞IO,也就是BIO。
but,java13的时候
但是我还没研究清楚,这算不算是使用了NIO。
以上是关于java中的NIO,BIO,AIO的主要内容,如果未能解决你的问题,请参考以下文章