今天我们以字节流作为主要学习的内容:
先来看看流式部分的类结构图:
IO流式部分.png
大家看一下上面的流式部分的类结构图,要熟记这张图。好,开始我们的今天学习的三部曲:
第一步:装饰模式
java的IO体系是基于装饰模式设计的,那么我们就需要先去了解装饰模式是个什么东东,然后有个这个基础去学习IO体系就快很多了,这里仅对装饰模式做简单的描述,后续会有相关的专题来白话设计模式。
装饰模式简单理解:定义一个抽象类构件,通过继承并实现抽象方法达到可以完成一些其他职责功能的对象构件,达到解耦、动态扩展的装饰效果。
装饰模式UML图第二步:IO之InputStream 类结构
下面以InputStream为例来梳理IO类的继续关系思维导图:
InputStream类思维导图
说明:
1、InputStream 是一个抽象构件;ObjectInputStream、ByteArrayInputStream 、FileInputStream 是具体的装饰类;FilterInputStream 对抽象构件进行了封装;DataInputStream、BufferedInputStream、PushbackInputStream都是具体的装饰类;
2、在使用的时候Buffered是用来做缓存使用的;ObjectInputStream、ByteArrayInputStream 读写是必须成对出现的。并且ObjectInputStream中所写入的对象必须是序列化的;
读写流的类基本上是一一对应的,我们来看一下对应的关系图:
输入输出流的对应关系图
第三步:简单使用
从文件读取数据到内存中:
DataInputStream in = new DataInputStream(
new BufferedInputStream(
new FileInputStream(
new File(filePath))));
将内存数据写入文件:
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(
new File(filePath))));
用法剖析:
1、根据filePath 创建一个flie ,使用FileInputStram 即可将文件数据以字节流的方式读入到内存中;
2、BufferedInputStream 为了要用这个缓存区呢?
如果一个字节一个字节的读写磁盘,IO的压力巨大,使用Buffer缓存区后,读取了一堆数据后再进行读写,减少磁盘的读写,保护磁盘。
3、那又是为什么要使用DataInputStream呢?
为了实现与机器类型无关的Java基本类型的读写。
注意事项:
在使用字节流的时候如果你是使用Buffer缓存的字节流,那么在你使用完后,需要以此调用flush() 、close()方法来释放资源;
而其他的则仅仅需要调用close()即可。
字节流:就是一个字节一个字节的读写。以上的内容仅仅是简单的学习使用。
下节预告: 字符流
网友评论