java中的NIO,BIO,AIO

简介: 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啥关系


tomcat6默认就使用的BIO,而且也只有BIO。


tomcat7和tomcat8都开始支持APR模式(简单理解,就是利用JNI从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能,也是Tomcat运行高并发应用的首选模式。),但是观察源码就会发现,tomcat7在没有APR配置的情况下会选择BIO。tomcat8在没有检测到APR配置的情况下会选择NIO。


BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。 NIO是一个基于缓冲区、并能提供非阻塞I/O操作的Java API。适用于连接数目多且连接比较短(轻操作)的架构。 AIO(NIO2)方式使用于连接数目多且连接比较长(重操作)的架构,充分调用OS参与并发操作,编程比较复杂。


tomcat8开始支持APR利用JNI调用本地API,大幅度提高了tomcat的IO性能,是tomcat的“大杀器”,但是如果要使用APR就要安装对应 的组件。


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。

相关文章
|
9月前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
291 0
|
11月前
|
监控 Java API
探索Java NIO:究竟在哪些领域能大显身手?揭秘原理、应用场景与官方示例代码
Java NIO(New IO)自Java SE 1.4引入,提供比传统IO更高效、灵活的操作,支持非阻塞IO和选择器特性,适用于高并发、高吞吐量场景。NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),能实现多路复用和异步操作。其应用场景涵盖网络通信、文件操作、进程间通信及数据库操作等。NIO的优势在于提高并发性和性能,简化编程;但学习成本较高,且与传统IO存在不兼容性。尽管如此,NIO在构建高性能框架如Netty、Mina和Jetty中仍广泛应用。
309 3
|
11月前
|
存储 监控 Java
Java的NIO体系
通过本文的介绍,希望您能够深入理解Java NIO体系的核心组件、工作原理及其在高性能应用中的实际应用,并能够在实际开发中灵活运用这些知识,构建高效的Java应用程序。
338 5
|
12月前
|
Java
BIO、NIO、AIO 有什么区别
BIO(阻塞I/O)模型中,服务器实现模式为一个连接一个线程;NIO(非阻塞I/O)使用单线程或少量线程处理多个请求;AIO(异步I/O)则是在NIO基础上进一步优化,采用事件通知机制,提高并发处理能力。
399 6
|
网络协议 Dubbo Java
一文搞懂NIO、AIO、BIO的核心区别(建议收藏)
本文详细解析了NIO、AIO、BIO的核心区别,NIO的三个核心概念,以及NIO在Java框架中的应用等。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文搞懂NIO、AIO、BIO的核心区别(建议收藏)
|
Java 消息中间件 缓存
JAVA中BIO、NIO、AIO的分析理解
本文分析阻塞、非阻塞、同步和异步概念上的区别以及各种IO模型的操作流程,同时分析BIO、 NIO、 AIO的通信机制,并通过demo深入比较三种IO的优缺点。输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入输出设备有文件、键盘、打印机、屏幕等。数据可以按记录(或称数据块)的方式传递,也可以 流的方式传递 。所谓记录,是指有着内部结构的数据块。记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。
14592 5
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
135 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
156 1
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案