Java IO流

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就是通过我们选择器监听多个通道,非堵塞,处理完成后就返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇塞大嘴好帅(DaZuiZui)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值