Java IO流

news/2024/10/17 10:28:23/

Java IO流

IO就是Intput和Output也就是输入输出,将数据输入到计算机内存的过程叫做输入,从内存读取出来的数据叫做输出。Java的IO流总共有40多个类,他们都是由下个4个抽象类派生出来的,InputStream和Read和OutputStream和Writer。

IO里使用的设计模式

装饰器模式

​ 装饰器(Decorator)模式可以字啊不改原有对象的情况下进行扩展,装饰器模式是通过组合来替换继承来扩展原始类的功能,在继承非常法则的场景下这个设计模式是非常实用的,在IO流中他们的继承关系就是非常的复杂,所有在IO流中使用了装饰器模式。

​ FilterInputStream和FilterOutputStream对应输入流和对应输出流都是我们装饰器模式的核心,分别用于增强自累InputStream和OutputStream子类对象的功能。

适配器模式

适配器模式Adapter pattern模式主要用于接口互相不兼容的类的协调工作,在适配器模式中,**被适配的对象叫做适配者(Adaptee),作用于适配者的对象叫做适配器(Adapter)**类适配器用继承的关系实现,对象适配器使用组合关系来实现。

在我们IO流中字符流和字节流的接口不同,他们之间的协调工作就是使用适配器来实现,准确点来说是对象适配器,通过适配器我们可以将一个字节流对象适配成一个字符流对象,这样我们就可以通过字节流对象来读取和写入了。

我们的inputstream和outputstream的子类就是适配者,Inputstreamreader和outputstreamwriter就是适配者。

工厂模式

在我们的NIO中就大量使用了工厂模式,比如我们的newInputStream方法用于创建INputStream对象,就是用了静态工厂。

观察者模式

NIO中的文件目录舰艇就是用了观察者模式,**NIO中的文件目录监听服务基于watchservice接口和watchble接口。**WatchService属于观察者,watchble属于被观察者。

BIO

BIO就是同步堵塞IO模型,当程序发起read调用后,会一直堵塞,知道内核吧数据拷贝到用户空间。如果我们并发特别高BIO就显然没有优势了

NIO

NIO就是我们的同步非堵塞IO模型,当我们application发起read调用,等待数据从内核空间拷贝到用户空间这段时间里,县城依然是堵塞的,知道内核数据拷贝到用户空间,

我们的BIO和NIO比较,我们的NIO通过轮训操作避免了一只堵塞。当然这么做是十分消耗CPU的这时候我们的多路复用IO就来了。IO多路复用模型中,县城首先发起select调用,首先询问数据是否准备就绪,如果内核吧数据准备好了,用户就发起read调用(数据从内核空间读取到用户空间)这段区间还是堵塞的。

IO多路复用模型系统调用有select 还有epoll,

select是内核提供系统的调用他支持一次查询多个系统调用的可用状态。

epoll调用是linux2.6他相当于select的增强版本,对selcet进行了io执行效率优化

IO多路复用模型就是通过减少无效的系统调用减少了对CPU资源的消耗,在Java中的NIO中有一个非常重要的选择器概念,也被称为多路复用器,通过它,一个线程可以管理多个客户端的链接,当客户端数据到了之后才为他服务。

简单来说NIO就是通过我们选择器监听多个通道,非堵塞,处理完成后就返回。


http://www.ppmy.cn/news/47288.html

相关文章

网络拥塞控制,对越远的流量越宽容

考虑下面的网络传输场景: ​ S1,S2,S3,S4 向 D 方向发送,R4 发生拥塞。R4 必须丢弃一些数据进行疏导反馈拥塞信号,否则谁也过不去。 优先丢掉离得最近的 S4 的数据,其次依次丢 S3,S2…

ChatGPT会如何改变制造业?

来源 | Smart Industry Edgenesis编译 ChatGPT最新版本的发布成为热门头条。OpenAI表示该版本的ChatGPT能够在多个专业测试中达到“人类水平”的表现,例如司法考试和SAT考试。不过,在工业领域中,ChatGPT能够发挥怎样的作用呢?Sma…

计算广告(十七)

多渠道组合路径效率评价 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 分析背景: 电商归因分析通常以 last_click 为基准,将成交转化归功于用户完成转化前的最近一个广告系列。然而,在此之前&a…

HTTP的那些事儿

超文本传输协议(Hyper Text Transfer Protocol,HTTP),它是在计算机世界中的两个点之间传递文本,图片,多媒体等超文本文件的协议。HTTP处在数据链路层,网络层,传输层,应用…

java 资料地址汇总

1 SpringBoot - 使用 Assert 校验让业务代码更简洁 SpringBoot - 使用 Assert 校验让业务代码更简洁 2 MyBatis-Plus 还手写 Join 联表查询?一个依赖轻松搞定,真香! MyBatis-Plus 还手写 Join 联表查询?一个依赖轻松搞定&#…

中小企业面临怎样的数字化转型局面

当前,我国经济长期向好的基本面没有改变,但承受着“需求收缩、供给冲击、预期减弱”的三重压力,中小企业的数字化转型之路较之以往更加艰难、曲折。为帮助中小企业纾困解难、平稳渡过危机,需进一步优化政策“组合拳”,…

CMake

CMake定义 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C特性,类似UNIX下的automake。只是 CMake 的组态档取名为 C…

背包问题——01背包|完全背包

目录 前言&背包问题的历史 01背包 1、题目 2、暴力解01背包 Ⅰ、代码 3、动态规划解01背包 Ⅰ、二维dp数组解01背包 1)dp数组的含义 2)递推公式 3)dp数组的初始化 4)遍历顺序的讨论 5、代码 Ⅱ、一维数组解01背包 1&…