Java深入理解io篇(二)—四大抽象类
深入理解IO篇(如有错误,请各位大佬多多指正)
【Java】Java深入理解io篇(一)—全篇概览:
【Java】Java深入理解io篇(二)—四大抽象类:
【Java】Java深入理解io篇(三)—缓冲流和标准IO:
【Java】Java深入理解io篇(四) —数据流,对象流和序列化:InputStream/OutputStream和Reader/writer类是所有IO流类的抽象父类,我们有必要简单了解一下这个四个抽象类的作用。然后,通过它们具体的子类熟悉相关的用法。
- InputStram
- 此抽象类是表示字节输入流的所有类的负累。InputStream是一个抽象 类,不可实例化。数据的读取需要由它的子类来实现。根据节点的不同,它派生了不同的节点流子类
- 继承自InputStream的流都是用于向程序中输入程序,且数据的单位为字节(8bit)
- 常用方法:
- int read():读取一个字节的数据,并将字节的值作为int类型返回(0~255之间的一个值)。如果未读出字节则返回-1(返回值-1表示读取结束)
- long skip(long n) 跳过并从输入流中丢弃n个字节的数据
- int read(byte[] b) 从该输入流服务区最多b.length个字节的数据为字节数组
- int read(byte[] b, int off, int len) 从该输入流读取最多,len字节的数据为字节数组。
- void close():关闭输入流对象,释放相关系统资源
- OutputStream
- 此抽象类是表示字节输出流的所有类的父类,输出流接受输出字节并将这些字节发送到某个目的地。
- 常用方法:
- void write(int n):向目的地中写入一个字节
- void write(byte[] b) 将b.length个字节从指定的字节数组写入此文件输出流。
- void write(byte[] b, int off, int len)将len字节从位于偏移量off的指定字节数组写入此文件
- void close():关闭输出流对象,释放相关系统资源
- Reader
- Reader用于读取的字符流抽象类,数据单位为字符
- 常用方法:
- int read():读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode值)。如果未读出字符则返回-1(返回-1表示读取结束)。
- int read(char[] b) 从该输入流服务区最多b.length个字节的数据为字节数组
- int read(char[] b, int off, int len) 从该输入流读取最多,len字节的数据为字节数组。
- void close():关闭流对象,释放相关系统资源。
- Writer
- Writer用于写入的字符流抽象类,数据单位为字符
- 常用方法:
- void write(int n):向输出流中写入一个字符
- write(char[] cbuf) 写入一个字符数组。
- write(char[] cbuf, int off, int len)` 写入字符数组的一部分。
- void close():关闭输出流对象,释放相关系统资源
注意:
- 为了减少对硬盘的读写次数,提供效率,通常设置缓存数组。相应地,读取时使用的方法为:read(byte[] b);写入时的方法为:write(byte[] b, int off, int length).
- 程序中如果遇到多个流,每个流要单独关闭,防止其中一个流出现异常后导致其他流无法关闭的情况
- 使用字符流读取文本文件,可以有效避免乱码现象