java基础-io

news/2024/4/24 16:28:40/文章来源:https://blog.csdn.net/weixin_43761434/article/details/136510253

文章目录

  • IO常见面试题
    • java中io流分为几种
    • BIO,NIO,AIO有什么区别
  • IO分类
  • 字符流-字节流-缓冲区
    • 字节流、字符流和转换流之间的关系
    • 字节字符得区别
    • 缓冲区
  • 同步阻塞IO/BIO
  • 同步非阻塞IO/NIO
    • java NIO由几个核心部门:缓存Buffers;通道Channels;选择器Selectors。
      • 缓冲区(buffer):
      • 通道(channel):
      • 多路复用器(selector):
  • 异步非阻塞IO/AIO

IO常见面试题

java中io流分为几种

  • 按照流的流向可分为输入流与输出流
  • 按照操作单元分可分为字节流和字符流

BIO,NIO,AIO有什么区别

  • BIO:同步阻塞io:数据的读取写入必须阻塞在一个线程内等待其完成。在活动连接数不多的情况下,这种模型就比较不错。
  • NIO:同步非阻塞io:它支持面向缓冲,基于通道的I/O操作方法。
  • AIO(NIO2):异步非阻塞io:高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发

IO分类

在这里插入图片描述

字符流-字节流-缓冲区

字节流、字符流和转换流之间的关系

  • 字节流:读取字节到内存或将字节写入硬盘文件中。
  • 字符流:将字节转换为字符(读入)或将字符转换为字节(写出)。
  • 转换流:将字节按照指定的编码格式转换为字符(读入),或将字符按照指定的编码格式转换为字节(写出)。

字节字符得区别

  • 字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
  • 字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。

缓冲区

  • 可以简单地理解为一段内存区域,某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。

  • 字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
    对于 Java 字符流的操作都是在缓冲区操作的,所以如果我们想在字符流操作中主动将缓冲区刷新到文件则可以使用 flush() 方法操作。
    在这里插入图片描述

同步阻塞IO/BIO

  • 用户需要等待read将socket中的数据读取到buffer后,才继续处理接收的数据。整个IO请求的过程中,用户线程是被阻塞的,这导致用户在发起IO请求时,不能做任何事情,对CPU的资源利用率不够。
  • 基本通信过程是每次client请求过来时server会启动一个线程进行通信,这种通信模型最大的缺点就是:一连接一线程的模型导致服务端无法承受大量客户端的并发连接。从而导致服务器线程暴增,性能急剧下降,甚至宕机。
    在这里插入图片描述

同步非阻塞IO/NIO

  • 采用一个线程来管理多个客户端的连接请求,这样能够确保在连接过程中不会被阻塞,在将建立好的连接分配给对应的处理线程
    在这里插入图片描述

java NIO由几个核心部门:缓存Buffers;通道Channels;选择器Selectors。

缓冲区(buffer):

缓冲区实际上是一个容器对象,更直接的说,其实就是一个数组,在NIO 库中,所有数据都是用缓冲区处理的。
使用Buffer读写数据一般遵循以下四个步骤:
1:写入数据到Buffer: 直接将数据写入buffer
在缓冲区中,最重要的属性有下面三个,它们一起合作完成对缓冲区内部状态的变化跟踪:

  • position:指定了下一个将要被写入或者读取的元素索引,它的值由get()/put()方法自动更新,在新创建一个Buffer 对象时,position 被初始化为0。
  • limit:指定还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。
  • capacity:指定了可以存储在缓冲区中的最大数据容量,实际上,它指定了底层数组的大小,或者至少是指定了准许我们使用的底层数组的容量。

2:调用flip()方法:通过flip()将buffer从写模式切换到读模式 
3:从Buffer中读取数据:   
4:调用clear()方法或者compact()方法:

  • clear()方法会清空整个缓冲区。
  • compact()方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。

通道(channel):

  • 是一个通道,通过它读写 Buffer 中的数据。
  • Java NIO中几个最重要的通道的实现
    1:FileChannel:
    从文件中读写数据
    2:DatagramChannel:
    能通过UDP读写网络中的数据
    3:SocketChannel:
    能通过TCP读写网络中的数据
    4:ServerSocketChannel:
    可以监听新进来的TCP连接,对每一个新进来的连接都会创建一个SocketChannel

多路复用器(selector):

多路复用器,Selector 不断轮询注册在其上的 Channel,如果某个 Channel 有新的 TCP 链接接入、读和写事件,这个 Channel 就处于就绪状态,会被 Selector 轮组出来,通过SelectionKey() 可以获取就绪 Channel 的集合,进行后续的 IO。
在这里插入图片描述

异步非阻塞IO/AIO

AIO(Asynchronous I/O)是一种异步非阻塞的 I/O 模型,其实现原理如下:

  • 操作系统支持:
    AIO 需要操作系统提供对异步 I/O 的支持,通常通过操作系统提供的异步 I/O 接口来实现。

  • 事件驱动:
    AIO 通过事件驱动的方式来处理 I/O 操作。当应用程序发起一个异步 I/O 请求后,操作系统会立即返回,而不会阻塞当前线程。

  • 回调函数:
    在异步 I/O 操作完成后,操作系统会通知应用程序,应用程序可以注册一个回调函数(Callback),当 I/O 操作完成时,操作系统会调用这个回调函数来处理完成的结果。

  • 内核态处理:
    异步 I/O 操作通常由操作系统的内核来处理,内核会负责实际的 I/O 操作,而应用程序可以继续执行其他任务,不会被阻塞。

  • 适用场景:
    AIO 适用于需要处理大量并发连接且每个连接的 I/O 操作耗时较长的场景,例如网络编程中的高性能服务器。

总的来说,AIO 通过事件驱动和回调函数的方式实现了异步非阻塞的 I/O 操作,提高了系统的并发能力和性能。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_997943.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目建设计划书-word

【项目建设计划书-word】 项目描述(项目目标,客户需求情况,项目交付清单,验收标准和交付期限,服务及约束)项目组织(项目组人员架构,职责分工,人员投入安排及时间点安排&…

气相白炭黑外资垄断格局被打破 国内本土企业数量增加

气相白炭黑外资垄断格局被打破 国内本土企业数量增加 气相白炭黑又名气相二氧化硅,是一种无毒、无味、无嗅,无污染的非金属氧化物,主要由硅的卤化物在氢氧火焰中高温水解生成的带有表面羟基和吸附水的无定形的纳米级颗粒。气相白炭黑主要用于…

测试一下 Anthropic 宣称超过 GPT-4 的 Claude 3 Opus

测试一下 Anthropic 宣称超过 GPT-4 的 Claude 3 Opus 0. 引言1. 测试 Claude 3 Opus 0. 引言 今天测试一下 Anthropic 发布的 Claude 3 Opus。 3月4日,Anthropic 宣布推出 Claude 3 型号系列,该系列在广泛的认知任务中树立了新的行业基准。该系列包括…

【NR 定位】3GPP NR Positioning 5G定位标准解读(三)

目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备(UE) …

c++ 中const

对于基础类型直接赋值 void test01(){const int data10;cout<<"data"<<data<<endl;int * p (int*)&data;*p 1000;cout<<"*p"<<*p<<endl;cout<<"after data"<<data; } c中&#xff0c;对于…

洛谷 P1731 [NOI1999] 生日蛋糕

题目 题目链接 自己没看题解写的&#xff0c;摸石头过河&#xff0c;解释一下 首先&#xff0c;输入输出都是正整数。先搞定输入&#xff0c;再判断条件&#xff0c;如果无解&#xff0c;输出0&#xff0c;否则输出蛋糕外表面面积Q&#xff08;这里用全局变量&#xff0c;开l…

【愚公系列】2024年02月 《网络安全应急管理与技术实践》 013-网络安全应急技术与实践(Web层-XSS钓鱼攻击)

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022…

全志D1s裸机开发之体验第一个程序

体验第一个程序 2.1 编译烧录运行 2.1.1 编译 先进入源码目录&#xff0c;打开 Git Bash&#xff0c;如下图操作&#xff1a; 然后在 Git Bash 中执行 make 命令&#xff0c;可以生成 benos_payload.bin 文件&#xff0c;如下图所示&#xff1a; 2.1.2 烧录运行 使用 2 条 …

Leetcode HOT150

55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1 …

用云手机进行舆情监测有什么作用?

在信息爆炸的时代&#xff0c;舆情监测成为企业和政府决策的重要工具。通过结合云手机技术&#xff0c;舆情监测系统在品牌形象维护、市场竞争、产品研发、政府管理以及市场营销等方面发挥着关键作用&#xff0c;为用户提供更智能、高效的舆情解决方案。 1. 品牌形象维护与危机…

基于java ssm springboot女士电商平台系统

基于java ssm springboot女士电商平台系统源码文档设计 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

第107讲:Mycat实践指南:取模分片下的水平分表详解

文章目录 1.使用取模分片水平分表2.水平分表取模分片案例2.1.准备测试的表结构2.2.配置Mycat实现范围分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat 2.3.写入数据观察水平分表效果 1.使用取模分片水平分表 平…

2024新疆专升本考试报名教程详解

2024新疆专升本报名时间已经开始了&#xff0c;想要参加考试报名的同学可以提前准备好报名照

产品推荐 - GX-SOPC-5CEFA5-M484 FPGA核心开发板

● 核心板采用8层板精心设计 ● FPGA&#xff1a;采用Intel&#xff08;ALTERA&#xff09; Cyclone V 5CEFA5&#xff0c;Les为77K&#xff0c;内嵌存储器为4460Kb&#xff0c;硬件乘法器为300个&#xff0c;最大等效门数约2300万门&#xff1b;新增DSP Block&#xff08;150…

新版AndroidStudio的Gradle窗口显示task list not built 问题解决

在使用新版AndroidStudio时&#xff0c;会出现&#xff0c;Task List not built 的问题。如果你记得task的名字&#xff0c;当然可以 直接通过命令 gradle taskname 或者 ./gradlew taskName直接执行即可&#xff0c;但是若是记不住&#xff0c;还是把这个任务构建处理比较好用…

鸿蒙Harmony 时代的跨端方案

终端系统的数量和种类不断增长&#xff0c;开发者面临着多平台开发的挑战。以往开发者一般只需要维护iOS、android、MacOS、windows几个主流核心终端操作系统即可&#xff0c;但是随着信创化的趋势&#xff0c;统信、麒麟、鸿蒙等操作系统也开始崛起&#xff0c;后续可能还会涌…

智慧城市的新引擎:物联网技术引领城市创新与发展

目录 一、引言 二、物联网技术与智慧城市的融合 三、物联网技术在智慧城市中的应用 1、智慧交通管理 2、智慧能源管理 3、智慧环保管理 4、智慧公共服务 四、物联网技术引领城市创新与发展的价值 五、挑战与前景 六、结论 一、引言 随着科技的日新月异&#xff0c;物…

FPGA时序约束与分析--数据到达路径和数据需求路径

文章目录 前言一、定义二、时序模型三、公式推导 前言 时序约束的定义–设计者根据实际的系统功能&#xff0c;通过时序约束的方式提出时序要求&#xff1b; FPGA 编译工具根据设计者的时序要求&#xff0c;进行布局布线&#xff1b;编译完成后&#xff0c; FPGA 编译工具还需…

Java网络通信TCP

目录 TCP两个核心类 服务端 1.用ServerSocker类创建对象并且手动指定端口号 2.accept阻塞连接服务端与客户端 3.给客户端提供处理业务方法 4.处理业务 整体代码 客户端 1.创建Socket对象&#xff0c;并连接服务端的ip与端口号 2.获取Socket流对象&#xff0c;写入数据…

HAproxy

四层&#xff1a; - LVS&#xff1a;Linux Virtual Server - Nginx&#xff1a; - HAProxy&#xff1a;High Availability Proxy 七层: - HAProxy - Nginx 硬件&#xff1a; - F5 https://f5.com/zh- Netscaler https://www.citrix.com.cn/product…