关于java流的几个概念:IO、BIO、NIO、AIO

从EPA官方工具到国产化替代思考:SWMM在城市内涝模拟中的前世、今生与未来 本文探讨了SWMM(暴雨管理模型)在城市内涝模拟中的技术演进与国产化替代实践。从SWMM的核心算法基因到中国特色的改进版本CEPSWMM,文章分析了模型在应对极端天气和本土化挑战中的创新应用。同时,介绍了PySWMM开源项目如何推动模型生态的智能化发展,以及机器学习与水动力模型融合的未来趋势。 阅读详情

具体来看看java中的几种流


IO/BIO


BIO就是指IO,即传统的Blocking IO,即同步并阻塞的IO。这也是jdk1.4之前的唯一选择,依赖于ServerSocket实现,即一个请求对应一个线程,如果线程数不够连接则会等待空余线程或者拒绝连接。所以用这种方式,在高并发情况下效率是很低的,也不可靠,一般只应用于连接数比较小且固定架构的应用,但api也比较容易使用。


NIO


新的IO,即New IO或者Non-Blocking IO,即同步不阻塞的IO。jdk1.4之后提供了一系列的方法来操作流,定义在java.nio包下面。相比于传统的BIO,NIO 提供了高速的面向快的I/O,它加入了Buffer、Channel、Selector等概念。它是基于事件驱动的,采用了Reactor模式,它使用一个线程管理所有的socket通道,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。它的特点是要不断主动地去询问数据有没有处理完,一般只适用于连接数目较大但连接时间短的应用,如聊天应用等。


AIO


新的IO2.0,即NIO2.0,jdk1.7开始应用,叫做异步不阻塞的IO。AIO引入异常通道的概念,采用了Proactor模式,简化了程序编写,一个有效的请求才启动一个线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间长的应用。


几种IO的综合对比:



BIONIOAIO
客户端:线程数1:1M:1M:0
阻塞类型阻塞非阻塞非阻塞
同步类型同步同步异步
编程难度简单非常复杂复杂
调试难度简单复杂复杂
可靠性非常差
吞吐量


java提供的NIO的api使用比较复杂,一般建议使用像netty这样的框架,而不要使用jdk自带的api。

Mixer-First Receiver适用于宽带阵列应用的接收机技术1 Mixer-First Receiver适用于宽带阵列应用的接收机技术1技术的背景单元级数字化阵列传统链路到Mixer-First链路的逻辑考虑三种场景小结 技术的背景 在文章《吊打全球的顶级毫米波数字阵列项目-MIDAS》中提到了DARPA在MIDAS项目中在毫米波实现宽带单元级数字化阵列用到了一个关键的叫做N-Path filter的技术,而这个技术同样出现在了《让微波射频工程师颤抖的芯片-MATRICs》的MATRICs芯片中。 为什么DARPA的各个合作研究机构选择这种技术?这篇来自Universi 阅读详情

相关推荐

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

shufawangzhang的博客 3920

什么是 BIO,NIO,AIO?(一)

一.什么是io? IO的全称其实是:Input/Output的缩写。 bio是blocking io即 阻塞io的意思 二.BIO BIO 就是传统java.io包,它是基于模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入或者输出时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用时可靠的线性顺序。它的有点就是代码比较简单、直观;缺点就是 IO ...

无名小辈 1035

SimAssist:基于MATLAB API的Simulink效率工具开发与应用

在基于模型的设计(MBD)和工程仿真领域,自动化与效率提升是核心诉求。通过MATLAB API和面向对象编程(OOP),开发者可以构建定制化工具,实现模型操作的批量化、仿真程的自动化以及团队协作的规范化。这类工具的技术价值在于将工程师从繁琐、重复的手动劳动中解放出来,显著提升Simulink建模、仿真及代码生成全程的可靠性与一致性。其典型应用场景包括复杂系统的参数扫描分析、自定义模块库的版本管理、以及仿真报告的一键生成。本文以SimAssist为例,深入剖析了如何利用MATLAB App Designe

weixin_34239592的博客 615

Java I/O 模型详解:BIONIOAIO

java,io

@chen 994

java 的三种IO模型(BIONIOAIO

完成后,操作系统会通知应用程序,或者应用程序主动查询完成状态。使线程在等待IO完成的同时可以执行其他任务,提高了系统的并发性能。:同时管理多个通道,通过注册通道的事件(如连接就绪、读就绪、写就绪),使用单个线程就能处理多个通道,从而管理多个网络连接,提高了效率。每个客户端连接都会在一个独立的线程中处理,并且这个线程在处理 IO 操作时会阻塞,直到操作完成。数据从通道读取到缓冲区,或者从缓冲区写入到通道。:既可以从通道中读取数据,又可以写数据到通道。:用于在I/O操作完成后处理结果的回调接口。

BLU_111的博客 2655

关于java几个概念IOBIONIOAIO,有几个人全知道?

关于java几个概念IOBIONIOAIO,有几个人全知道? 关于同步、阻塞的知识我之前的文章有介绍,所以关于用到这些概念与之前多线程用的概念一样。 下面具体来看看java中的几种 IO/BIO BIO就是IO,即传统的Blocking IO,即同步并阻塞的IO。这也是jdk1.4之前

huangshulang1234的博客 278

java 修改最大nio连接数_关于java几个概念IOBIONIOAIO,有几个人全知道?...

关于同步、阻塞的知识我之前的文章有介绍,所以关于用到这些概念与之前多线程用的概念一样。下面具体来看看java中的几种IO/BIOBIO就是IO,即传统的Blocking IO,即同步并阻塞的IO。这也是jdk1.4之前的唯一选择,依赖于ServerSocket实现,即一个请求对应一个线程,如果线程数不够连接则会等待空余线程或者拒绝连接。所以用这种方式,在高并发情况下效率是很低的,也不可靠,一...

weixin_39657249的博客 109

JavaIO,BIO,NIO,AIO知多少?

开心一笑【一女人:“我真不放心丈夫,他准备到湖中心水最深的地方把猫扔掉。”邻居:“那有什么不放心的?”女人:“猫已回家一钟头了!”】提出问题JavaIO,BIO,NIO,AIO知多少???解决问题前言本篇文章参考了网上很多大神的文章,包括一些代码实例。在文章最后都有写明出处。如果文章有写错的地方,欢迎留下评论。本篇文章是我录制视频《JavaIO,BIO,NIO,AIO知多少?》的讲课稿子。下面是

IT技术分享 2万+

BIONIOAIO理解

一些对BIONIOAIO通信模型的总结

qq_56919740的博客 8793

BIONIOAIO的区别

IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、同步阻塞的BIO 在JDK1.4之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个serverSocket,然后在客户端启动socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端线程会等待请求结束后才继续执行。 二、同步非阻塞的NIO NIO本身是基于事件驱动思

学Java,找哪吒 2万+

JavaIO 分为几种?BIO,NIO,AIO 有什么区别?

IO 分为几种 Java中的分为两种,一种是字节,另一种是字符,分别由四个抽象类来表示(每种包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的均是由它们派生出来的. 字符和字节是根据处理数据的不同来区分的。字节按照8位传输,字节是最基本的,所有文件的储存是都是字节(byte)的储存,在磁盘...

永远不要停下学习的脚步。 1万+

javaIO详解之BIO

本文对java bio做了一个详细的总结,主要包括io的一些易混淆概念解释,使用易错点进行了示例,最后对java io的实际应用做了个尝试

峰峯的专栏 1万+

JavaIOBIONIOAIO分别是什么?

BIO:适合连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解。NIO:适合连接数目多且连接比较短(轻操作)的架构,如聊天服务器、弹幕系统、服务器间通信。编程比较复杂,JDK1.4开始支持。AIO:适合连接数目多且连接比较长(重操作)的架构,如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。选择哪种IO模型,取决于具体的应用场景、性能需求以及开发资源。

dusked 1206

Java IO,BIONIOAIO

接着客户端和服务端就进行阻塞式的通信,客户端发送一个请求,服务端 Socket 进行处理后返回响应,在响应返回前,客户端那边就阻塞等待,什么事情也做不了。这种方式的缺点, 每次一个客户端接入,都需要在服务端创建一个线程来服务这个客户端,这样大量客户端来的时候,就会造成服务端的线程数量可能达到了几千甚至几万,这样就可能会造成服务端过载过高,最后崩溃死掉。阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。1.单线程处理多个客户端。

码农崛起 678

JAVA IO模式 —— BIONIOAIO

java的软件设计开发中,通信架构是不可避免的,我们在进行不同系统或者不同进程之间的数据交互,或者在高并发下的通信场景下都需要用到网络通信相关的技术,Java共支持3种网络编程的I/O模型:BlO、NIO、AlO 这三种模式的演变是 BIO -> NIO -> AIO,各自具有不同的优缺点,实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型

Fearless____的博客 906

AIO 详解

AIO(Asynchronous Input and Output) 异步IO则采用“订阅-通知”模式: 即应用程序向操作系统注册IO监听,然后继续做自己的事情。 当操作系统发生IO事件,并且准备好数据后,在主动通知应用程序,触发相应的函数 NIO在网络操作中,提供了非阻塞的方法,但是NIOIO行为还是同步的。 NIO的业务线程是在IO操作准备好时,得到通知,接着就...

dizan4060的博客 1933

详解Java中的BIONIOAIO

IOJava中比较难理解的一个知识点,但是IO在实际的开发场景中经常会使用到,比如Dubbo底层就是NIO进行通讯

Java鱼仔的博客 4254

Java基础之IO&NIO操作文件

一、简介 1.1 IOBIO)—阻塞式IO 起源于JDK1.0 java.io 包几乎包含了所有操作输入、输出需要的类。 所有这些类代表了输入源和输出目标。 java.io 包中的支持很多种格式,比如:基本类型、对象、本地化字符集等等。 一个可以理解为一个数据的序列。 输入表示从一个源读取数据,输出表示向一个目标写数据。 Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。 1.2 NIO—非阻塞式IO 起源于JDK1.4 1.3 BIONIO对比

做兴趣使然的Hero 1070

机械毕业设计——抹灰机设计(论文+DWG图纸+外文翻译+文献综述+开题报告).zip

机械毕业设计,包含论文和DWG图纸

上一篇: 在Intellij IDEA中使用Debug
下一篇: Intellij IDEA 神器的小技巧
K'illCode
博客等级 码龄9年 763粉丝 838原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值