Java IO之输入输出流
流是一组有序的数据序列,根据操作类型的不同,可以分为输入流和输出流。
在Java中定义了许多专门负责各种方式的输入和输出的类,它们被放在java.io包中。其中,所有的输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;所有的输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。
1.输入流
1.1. InputSteam类
InputSteam类是字节输入流的抽象类,是所有字节输入流的父类。
在InputSteam类中所有的方法出现错误都会引发IOException异常,下面讲解一些它的常用方法:
返回值 | 方法 | 说明 |
int | read( ) | 从输入流中读取数据的下一个字节 |
int | read(byte[] b) | 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 |
int | read(byte[] b, int off, int len) | 将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。 |
| mark( int readlimit ) | 在此输入流中标记当前的位置。readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数。 |
| reset() | 将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。 |
boolean | skip( long n ) | 跳过和丢弃此输入流中数据的 n 个字节。 |
boolean | markSupported( ) | 测试此输入流是否支持 mark 和 reset 方法。 |
void | close( ) | 关闭此输入流并释放与该流关联的所有系统资源。 |
说明:并不是所有的InputStream类的子类都支持InputStream中定义的所有方法,如:skip()、mark()、reset()等方法只对某些子类有用。
1.2. Reader类
Java中字符是Unicode编码,是双字节。InputStream类可以用来处理字节,但是处理字符是可能会出现会出现乱码。因此,Java为了字符文件的处理专门提供了一套单独的类Reader,单Reader类并不是InputStream类的替换者,而是在为了处理字符而存在的。
Reader类是字符输入流的抽象类,所有的字符输入流的实现都是它的子类。
Reader类中的方法与InputStream类中的方法类似,可以参考InputSteam类中的方法,详情可以参考JDK文档。
2.输出流
2.1. OutputStream类
OutputStream类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的父类。
OutputStream类中所有方法均返回void,在遇到错误时会引发IOException异常。下面讲解一些它的常用方法:
返回值 | 方法 | 说明 |
void | close() | 关闭此输出流并释放与此流有关的所有系统资源。 |
void | flush() | 刷新此输出流并强制写出所有缓冲的输出字节。 |
void | write(byte[] b) | 将 b.length 个字节从指定的 byte 数组写入此输出流。 |
void | write(byte[] b, int off, int len) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 |
void | write(int b) | 将指定的字节写入此输出流。 |
2.2 Writer类
Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。
下面讲解一些它的常用方法:
返回值 | 方法 | 说明 |
void | close() | 关闭此输出流并释放与此流有关的所有系统资源。 |
void | flush() | 刷新此输出流并强制写出所有缓冲的输出字节。 |
void | write(byte[] b) | 将 b.length 个字节从指定的 byte 数组写入此输出流。 |
void | write(byte[] b, int off, int len) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 |
void | write(int b) | 将指定的字节写入此输出流。 |
void | write(String str) | 写入字符串。 |
void | write(String str, int off, int len) | 写入字符串的某一部分 |
Writer | append( char c) | 将指定字符添加到此 writer。 |
Writer | append(CharSequence csq) | 将指定字符序列添加到此 writer。 |
Writer | append(CharSequence csq, int start, int end) | 将指定字符序列的子序列添加到此 writer.Appendable。 |