【IO】java IO流的类型及IO模型

news/2025/2/23 9:51:20

文章目录

  • `分类`
  • `字节流`
    • 输入流
    • 输出流
  • `字符流`
    • 输入流
    • 输出流
  • `字节缓冲流`
  • `字符缓冲流`
  • `4中常见的IO模型`
    • BIO(同步阻塞模型)
    • 同步非阻塞模型
    • NIO(多路复用模型)
    • AIO异步

分类

根据数据流向分为:输入流、输出流(以内存为中心,输入内存的为输入流,从内存输出的为输出流)

根据数据处理方式分为:字节流、字符流

字节流

输入流

  • InputStream
  • FileInputStram(InputStream 子类)
  • DataInputStream:用于读取指定类型数据,不能单独使用,必须结合其他流
  • ObjectInputStream:用于读取Java对象(反序列化)

输出流

  • OutputStream
  • FileOutputStream(OutputStream 子类)
  • DataOutputStream:用于写入指定类型数据,不能单独使用,必须结合其他流
  • ObjectOutputStream:用于写入Java对象(序列化)

字符流

信息的最小存储单位是字节,引入字符流操作的原因:

​ 在UTF-8中,英文占1字节,中文占3字节,如果采用字节流读取中文,会产生乱码现象,故引入字符流,方便对字符进行流操作。如果是音频、图片等媒体文件仍然使用字节流,如果使用字符流,会有数据丢失的情况。

输入流

  • Reader
  • InputStreamReader:字节流转换为字符流的桥梁。
  • FileReader

输出流

  • Writer
  • OutputStreamWriter:字符流装换位字节流的桥梁
  • FileWriter

字节缓冲流

IO操作时消耗性能的,缓冲流将数据加载至缓冲区中,一次可以读取/写入多个字节,避免了频繁的IO操作,提高效率。

字节流和字节缓冲流性能提升主要是在read(),write(int b)读取/写入一个字节的方法上。因为,字节缓存流会将读取的字节放在缓存区,减少IO的次数

但如果使用的是read(byte[] bytes),write(byte[] bytes)这两个方法,字节流和字节缓冲流的性能提升就不明显了。

  • BufferedInputStream
  • BufferedOutputStream

字符缓冲流

  • BufferedReader
  • BufferedWriter

4中常见的IO模型

同步阻塞I/O
同步非阻塞I/O
I/O多路复用
信号驱动I/O
异步I/O

BIO(同步阻塞模型)

同步阻塞 IO 模型中,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。

缺点:读取整个过程都是阻塞的,需要进行频繁的线程创建、切换。

在这里插入图片描述

同步非阻塞模型

同步非阻塞 IO 模型中,应用程序会一直发起 read 调用(轮询操作,避免阻塞),等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到在内核把数据拷贝到用户空间。

缺点:频繁的调用read(),消耗CPU资源。
在这里插入图片描述

NIO(多路复用模型)

IO 多路复用模型中,线程首先发起 select 调用,询问内核数据是否准备就绪,等内核把数据准备好了,用户线程再发起 read 调用。read 调用的过程(数据从内核空间 -> 用户空间)还是阻塞的。

在这里插入图片描述

AIO异步

异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。(不关心IO处理进程)
在这里插入图片描述


http://www.niftyadmin.cn/n/5863281.html

相关文章

Spring MVC中环境配置的实战应用

在现代的Spring MVC应用中,环境配置是一个非常重要的环节。通过合理配置环境,我们可以轻松地在开发环境、测试环境和生产环境之间切换,而无需修改代码。本文将通过一个具体的实例,展示如何在Spring MVC中设置环境配置,…

0222-leetcode-1768.交替合并字符串、389找不同、

1768.交替合并字符串 题目 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 1: 输入&…

[VSCode]彻底卸载和重装,并搭建Java开发环境

VSCode彻底卸载 由于当初是朋友帮忙装的,所以准备卸载,自己装一遍 从控制面板找到 vscode 将其卸载。 此时仅仅是删除了应用软件 删除安装插件 在图示路径中找到 .vscode 文件夹,将其删除,即可彻底清除安装的插件 C:\Users\user\.vscode …

组合优化问题的机器学习研究——以图匹配问题为例

【OR Talk NO.17 | 组合优化问题的机器学习研究——以图匹配问题为例】https://www.bilibili.com/video/BV1Zf4y1S7Zr?vd_source7c2b5de7032bf3907543a7675013ce3a 定义: 什么是图匹配? 在三个图片上提取点,包括内点、外点、噪声点&#x…

Win11 24h2 不能正常使用ensp的问题(已解决)

因为Win11 24h2的内核大小更改,目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本,virtualbox对于这个5.x.xx版本早已停止维护,所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…

计算机视觉算法实战 —— 虚拟试衣:从技术突破到商业落地(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 一、领域简介✨✨ 虚拟试衣(Virtual Try-On) 是计算机视觉与增强现实(AR)的交叉领域&#xf…

【多模态处理篇五】【DeepSeek文档解析:PDF/Word智能处理引擎】

你知道吗?全球每天产生的PDF文档超过10亿份,但90%的上班族还在用复制粘贴的笨办法处理文档!DeepSeek文档解析引擎就像给你的电脑装上了"文档翻译官",能把PDF/Word里的文字、表格、公式甚至排版样式都变成AI能理解的"语言"。举个真实场景:法务小姐姐用…

【p-camera-h5】 一款开箱即用的H5相机插件,支持拍照、录像、动态水印与样式高度定制化。

【开源推荐】p-camera-h5:一款轻量级H5相机插件开发实践 一、插件背景 在Web开发中,原生摄像头功能的集成往往面临以下痛点: 浏览器兼容性问题视频流与水印叠加实现复杂移动端适配困难功能定制成本高 为此,p-camera-h5 —— 一…