5.10JavaIo流四大抽象类
io流是input和output字节流
两大类
面向接口编程
面向父类编程(多态)
特点:
- 把握父类
- 实现类关注特点
对输入输出流分类
处理数据
- 字节流--->处理音频、视频、excel使用字节流
- 字符流--->处理纯文本,使用字符流
能使用字符处理的地方全部都可以使用字节流处理,能使用字节流处理的地方不一定能使用字符流处理
流向
- 输入流--->reader
- 输出流--->write
以程序为中心,进入程序称之为输入流。离开程序称之为输出流
流的功能
- 始终处于第一线的流称之为--->节点流--->ByteArray、file是节点流
- 在节点流的基础上进行包装--->处理流--->除了节点流以外的可以理解为处理流
流的操作步骤都是差不多的
四个抽象类
抽象类 | 说明 | 常用方法 |
InputStream | 字节输入流的父类,数据单位为字节 | int read()void close() |
OutputStream | 字节输出流的父类,数据单位为字节 | void write(int)void flush()void close() |
Reader | 字符输入流的父类,数据单位为字符 | int read()void close() |
Writer | 字符输出流的父类,数据单位为字符 | void write(String)void flush()void close |
字节流可以处理一些形式的数据(包括视频、音频等等)
InputStream---输入流超类
源码当中的特点:
- 实现了closeable接口(Java的底层是JVM,Java程序不能直接和操作系统打交道,所以只能向操作系统申请操作)
- Java--->文件--->简历了联系--->java虚拟机无法调用垃圾回收机制只能去申请
- closeable接口继承了AutoCloseable自动关闭接口,在该接口当中有一个关闭方法
常用方法:--->有普通方法和抽象方法
- void close();--->作用:关闭此输入流并释放与流相关联的任何系统资源
- abstract int read() throws Exception;--->抽象方法--->作用:从输入流读取数据的下一个字节(返回是int是字节)--->一个一个的去找
- int read(byte[] b);--->作用:从输入流中读取一些字节数,并将它们存储到缓存器阵列b中(返回的是int因为byte可以转成int)--->一段一段的去找
OutputStream---输出流超类
源码当中的特点:
- 实现了closeable接口和flushable接口--->强制刷新,避免数据停留在内存中,如果数据不间断的读取每一次都要进行flush操作
常用方法:--->有普通方法和抽象方法
- void close();--->释放系统资源
- void flush();--->作用:刷新此输出流并强制任何缓存的输出字节被写出
- abstract void write(int b);--->作用:将指定的字节写入此输出流--->一个一个的写
- void write(byte[] b, int off, int len);--->作用:将指定的字节数组写入off是偏移量,从off开始输入到输出流当中,输入长度是len--->一段一段的写
- void write(byte[] b);--->作用:将b.length字节从指定的字节数组写入此输出流
Reader读取字符的抽象类--->之能是字符,如果是音频、视频等处理不了
源码当中的特点:
- 实现了closeable接口和AutoCloseable接口还实现了一个可读接口readale
常用方法:
- int read();--->读取一个字符(一个字符可能多个字节)
- int read(char[] cbuf);--->将字符读入数组
Writer--->写入字符流的抽象类
源码当中的特点:
- 实现了接口closeable, Flushable, Appendable(写), AutoCloseable
特点:
- 全覆盖,从头开始写文件
- 从尾部追加,从尾开始写。--->是否可以启追加模式,有标识
常用方法:
- void write(int c);--->写一个字符
- void write(String str);--->写一个字符串
- void write(String str, int off, int len);--->写一个字符串的一部分
It's a lonely road!!!