java语言把与输入/输出有关的类都放在了java.io包中,其中,所有与输入流有关的类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类,而所有与输出流有关的类都是抽象类OutputStream(字节输出流)或抽象类Write(字符输出流)的子类
1.输入流
输入流抽象类有两种,分别是Inputstream(字节输入流)和Reader(字符输入流),
1.1 InputStream类
InputStream类时字节输入流的抽象类,是所有字节输入流的父类,InputStream类中的所有方法遇到错误时都会引发IOException异常,该类的常用方法及说明如下表:
方法 | 返回值 | 说明 |
read() | int | 从输入流中读取数据的下一个字符,返回0~255范围内的int字节值,如果因为已经到达流末尾而没有可用的字节,则返回-1 |
read(byte[] b) | int | 从输入流中读入一定长度的字节,并以整数的形式返回字节数 |
mark(int readlimit) | void | 在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数 |
reset() | void | 将输入指针返回到当前所做的标记处 |
skip(long n) | long | 跳过输入流上的n个字符并返回实际跳过的字节数 |
markSupported() | boolean | 如果当前流支持Mark()/reset()操作就返回true |
close() | void | 关闭此输入流并释放与该流关联的所有系统资源 |
注意:并不是InputStream类的所有子类都支持InputStream中定义的方法,如skip()、mark()、reset()等方法只对某些子类有用
1.2 Reader类
java中的字符是Unicode编码,是双字节的,而Inputsteam类使用来处理单字节的,并不适合处理字符,为此,java提供了专门用来处理字符的Reader类,Reader类时字符输入流的抽象类,也是所有字符输入流的父类。
Reader类中的方法与InputStream类中的方法类似,但需要注意的是,Reader类的read()方法的参数为char类型的数组,另外,Reader还提供了一个ready()方法,该方法用来判断是否准备读取流,其返回值为Boolean类型。
2.输出流
输出流抽象类也有两种,分别是OutputStream字节输出流和Writer字符输出流。
2.1 OutputStream类
OutputStream类时字节输出流的抽象类,是所有字节输出流的父类,OutputStream类中的所有方法均没有返回值,在遇到错误是会发生IOException异常,该类的常用方法如下表:
方法 | 说明 |
write() | 将指定的字节写入此输出流 |
write(byte[] b) | 将b个字节从指定的byte数组写入此输出流 |
write(byte[] b,int off,int len) | 将指定byte数组中从偏移量off开始的len个字节写入此输出流 |
flush() | 彻底完成输出并清空缓冲区 |
close() | 关闭输出流 |
2.2 Writer类
Writer类时字符输出流的抽象类,是所有字符输出流的父类,Writer类的常用方法及说明如下表:
方法 | 说明 |
append(char c) | 将指定字符添加到此writer |
append(charSequence csq) | 将指定字符序列添加到此writer |
append(charSequence csq,int start,int end) | 将指定字符序列的子序列添加到此writer.Appendable |
close() | 关闭此流,但要先刷新它 |
flush() | 刷新该流的缓冲 |
write(char[] cbuf) | 写入字符数组 |
write(char[] cbuf,int start,int len) | 写入字符数组的某一个部分 |
write(int c) | 写入单个字符 |
write(String str) | 写入字符串 |
write(String str,int start,int len) | 写入字符串的某一部分 |