io读取文件无地址_从IO到NIO到Netty的进阶之路(1)

如果单独讲IO的底层知识,可能需要一本书,本系列文章是结合java 封装完成的api,循序渐进的讲述java中IO的编码方式,没有面面俱到,更多的是从大方面介绍,先给大家一个完整的整体认知

IO的基本类型:

磁盘IO:从磁盘读写文件,对java来说,主要是使用java.io包下的封装好的api

网络IO:网络程序从socket缓冲区读写内容的过程,使用的是java.net包下的封装好的socket api

接下来一图胜千文:java传统IO的包结构

97b6cf298b4d5045a3d061de4396b5d3.png

java IO思维图--按照操作对象

【说明】我们看java io的类体系实在太多,几十个派生类,还有很多其他第三方扩展的,但是从操作对象来说,可以分为两类:字符流和字节流,是不是还是很晕?看看下面的代码

//新建测试文本文件,注意不要超过1024个字节File file = new File("/Users/test.txt");//读取方式一:字节流api读取文件内容InputStream fileInpuStream = new FileInputStream(file);byte[] byteArray = new byte[1024];//读取文件内容到字节数组,并且返回读取到字节数组的长度int len = fileInpuStream.read(byteArray);System.out.println("字节流读取文件内容:" + new String(byteArray,0,len));fileInpuStream.close();//读取方式一结束========//读取方式二:字符流api读取文件内容Reader fileReader = new FileReader(file);char[] charArray = new char[1024];int charLen = fileReader.read(charArray);System.out.println("字节流读取文件内容:" + new String(charArray,0,charLen));//读取方式二结束========

是不是有点感觉了?发现既可以用字节流的api读取文件,也可以用字符流的api读取数组,这两者的区别在哪里呢,记住下面表格的内容:

5dbf8d2976fb9588531496ec5027e2ea.png

没完呢,继续==============我是分割线========================

再来看一张图,从另外一个维度看看输入输出流

22ee1579a816ad67489322ccaf93ffac.png

java IO 节点流和处理流维度

【说明】这张图比第一张图多了左边的部分,节点流和处理流两个维度。最熟悉的BufferedInputStream是字节流,也是处理流;FileInputStream是字节流也是节点流。

节点流类型:可以从或者向一个特定的地点或者节点读写数据

处理流类型:对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,处理流的构造方法总是要带一个其他流对象作为参数,一个流对象进过其他流的多次包装,叫做流的链接

处理流可以简单理解成经过装饰的流。

这里就引出了一个大家最喜欢的设计模式:装饰者模式

16825c0f40439e29c32179da4bb988a6.png

装饰者模式类图

【说明】最下面的装饰类ConcreteDecorator1和2通过构造方法传入了Iparent类型的对象可以Iparent的实现类(如ParentImpl)的基础上扩展Iparent的功能,增加定义的extOperation方法,这个设计模式比通过继承类来扩展功能更灵活,有点组合复用的思想。

好了,见证奇迹的时刻到了,看一下BufferdInputStream的类图吧

a15339a8d404a9c3267fadf0cd8982fa.png

Java IO 装饰者模式

【说明】结合装饰模式的图,一目了然,完全的装饰者模式的思想。

现在再看到这行代码,大家应该就理解了背后的模式思想了:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(xxx))

未完待续..............下一篇会讲解java BIO模式下的网络IO基本代码和知识点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值