基础IO
1、 从数据传输方式看, 可以将 IO 分为
1.1 字节流, 字节流读区单个字节(一个字符根据编码的不同,对应的字节也不同,如 UTF-8 编码中文汉字是 3 个字节,GBK编码中文汉字是 2 个字节。)
1.2 字符流, 字节流用来处理二进制文件(图片、MP3、视频文件),字符流用来处理文本文件(可以看做是特殊的二进制文件,使用了某种编码,人可以阅读)
字节是计算机看的, 字符是给人看的。
2、 从数据来源或操作对象角度看, IO 类可以分为:
3、 Java IO 设计上使用了 装饰者模式: 所谓装饰,就是吧这个装饰者套在被装饰者上,从而动态扩展被装饰者的功能。
以 InputStream 为例:
InputStream 是抽象组建
FileInputStream 是 InputStream 的子类,属于具体组建,提供了字节流的输入操作;
FilterInputStream 属于抽象装饰者,装饰者用于装饰组建,为组建提供额外的功能。 例如: BufferedInputStream 为 FileInputStream 提供缓存的功能。
实例化一个具有缓存功能的字节流对象时,只需要在 FileInputStream 对象上再套一层 BufferedInputStream 对象即可
FileInputStream fileInputStream = new FileInputStream(filePath); BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
DataInputStream 装饰者提供了对更多数据类型进行输入的操作,比如 int、double 等基本类型。