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)

写入字符串的某一部分