1.IO的基本概念
- 什么是IO流?(从实际应用案例来感性认识IO流的重要性,阅卷功能,上传,下载等等)(Input、Output)
IO流如何划分? - 按方向分:输入流、输出流
- 按单位分:字节流、字符流(读取数据的单位)
读文本文件:字符流
文本文件,图片,视频(二进制文件):字节流 - 按功能分:节点流、处理流
你可以认为处理流功能更强大
2.数据单位换算
- 计算机保存文件的最小单位是字节
1K=1024字节
1M=1024K
1G=1024M
1T=1024G
1P=1024T
3.字节流(输入、输出)
- 字节流是最早出现的流,因为计算机保存文件的最小单位就是字节
- 成对出现的
- API为我们提供了两个字节流的基类
public abstract class InputStream
extends Object
implements Closeable - 此抽象类是表示字节输入流的所有类的超类。
public abstract class OutputStream
extends Object
implements Closeable, Flushable - 此抽象类是表示输出字节流的所有类的超类。
4.应用驱动API学习-字节流
4.1.写内容到文件中
1)对异常直接抛出,不处理的方式
2)采用标准处理异常的方式
3)实现对文件内容的追加
4)如果文件不存在,会出现什么情况?
4.2.读取文件的内容
5)采用逐个字节的读取方式
6)如果文件不存在,会出现什么情况
4.3.完成文件的拷贝功能
7)完成普通文本文件的拷贝
8)完成二进制文件的拷贝
a)图片
b)视频
4.4.优化文件的读写性能
9)读写大文件,例如视频文件,还是采用一个一个字节复制,效率极低,所以API为我们提供了数组的读取功能,具备缓冲区的作用,提高效率
10)采用字节缓冲区流–处理流
public class FilterInputStream
extends InputStream
FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。FilterInputStream 类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream 的所有方法。FilterInputStream 的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。
设计模式:装饰者模式
public class BufferedInputStream
extends FilterInputStream
BufferedInputStream 为另一个输入流添加一些功能,在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。
public class FilterOutputStream
extends OutputStream
此类是过滤输出流的所有类的超类。这些流位于已存在的输出流(基础 输出流)之上,它们将已存在的输出流作为其基本数据接收器,但可能直接传输数据或提供一些额外的功能。
public class BufferedOutputStream
extends FilterOutputStream
该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。