Java IO流 -> 概念及分类、实现类和基本方法
1. 流的概念及分类
1.1 流的概念
- Java程序中,对于数据的输入、输出操作以“流”(Stream)方式实现。
- JDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法完成输入或输出数据。
- Java的流类型位于java.io包中。
- 流是指程序和其他数据源之间的数据传输。其他数据源常见的有:文件、数据库、其他程序、网络连接、内存、IO设备等。
1.2 流的分类
- 按数据流的方向的不同,分为输入流和输出流。
- 按处理数据的单位不同,分为字节流和字符流。
- 按功能不同,分为节点流和处理流。
- JDK所提供的所有流类型,都分别继承自以下四种抽象流类型。
分类 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
-
输入流/输出流
- 站在程序的角度来定义的。
- 以程序为中心,数据由外部流向程序,称之为输入流InputStream(读入Reader);由程序到外部的操作,称之为输出流OutputStream(写出Writer)。
-
字节流/字符流
- 字节流:按照字节读取数据(InputStream、OutputStream);
- 字符流:按照字符读取数据(Reader、Writer),其底层还是基于字节流的操作,根据指定的编码表将字节流转换成了字符流进行操作。
-
节点流/处理流
- 节点流:可以从一个特定的数据源(节点)读写数据(如文件、内存);
- 处理流(包装流):是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强大的功能,以简化操作和提高程序的效率。
2. IO流的实现类
2.1 字节流
- 以Stream结尾的类全都是字节流,继承自InputStream的都是用于向程序输入数据,继承自OutputStream的都是用于从程序输出数据;
- 数据的单位为字节(8bit);
- 下图为字节输入流和输出流的实现类,蓝色为处理流,白色为字节流。
2.2 字符流
- 以Reader或Writer结尾的类都是字符流,继承自Reader的流都是用于向程序输入数据;继承自Writer的流都是用于从程序输出数据;
- 数据的单位为字符(16bit);
- 下图为字符的实现类,蓝色为处理流,白色为字节流。
3. InputStream/OutputStream类基本方法
3.1 InputStream类的方法
基本方法 | 说明 |
---|---|
int read() throws IOException | 读取一个字节并以整数0~255的形式返回,如果返回值为-1说明已经到输入流的末尾 |
int read(byte[] buffer) throws IOException | 读取一组字节并存储到一个数组buffer中,返回实际读取的字节数,如果读取前已经到输入流末尾返回-1 |
int read(byte[] buffer,int offset, int length) throws IOException | 读取length个字节, 并存储到数组buffer,从offset位置开始,返回实际读取的字节数,如果读取前已经到输入流末尾返回-1 |
void close() throws IOException | 关闭流释放资源 |
3.2 OutputStream类的方法
基本方法 | 说明 |
---|---|
int writer(int b) throws IOException | 向输出流中写入一个字节数据,该字节数据为参数b的低8位 |
int writer(byte[] b) throws IOException | 将一个字节类型的数组中的数据写入输出流 |
int writer(byte[] b,int offset, int length) throws IOException | 将一个字节类型的数组中的数据从指定位置开始的length个字节写入输出流 |
void close() throws IOException | 关闭流释放资源 |
void flush() throws IOException | 将输出流中缓冲区的数据全部强制送出 |
4. Reader/Writer基本方法
4.1 Reader类的方法
基本方法 | 说明 |
---|---|
int read() throws IOException | 读取一个字符并以整数0~255的形式返回,如果返回值为-1说明已经到输入流的末尾 |
int read(char[] buffer) throws IOException | 读取一组字符并存储到一个数组buffer中,返回实际读取的字符数,如果读取前已经到输入流末尾返回-1 |
int read(char[] buffer,int offset, int length) throws IOException | 读取length个字节, 并存储到字符数组buffer,从offset位置开始,返回实际读取的字节数,如果读取前已经到输入流末尾返回-1 |
void close() throws IOException | 关闭流释放资源 |
4.2 Writer类的方法
基本方法 | 说明 |
---|---|
int writer(int b) throws IOException | 向输出流中写入一个字符,该字符数据为参数b的低16位 |
int writer(char[] b) throws IOException | 将一个字符类型的数组中的数据写入输出流 |
int writer(char[] b,int offset, int length) throws IOException | 将一个字符类型的数组中的数据从指定位置开始的length个字节写入输出流 |
int writer(String str) throws IOException | 将一个字符串中的字符写入到输出流 |
int writer(String str,int offset, int length) throws IOException | 将一个字符串从offset位置开始的length个字符写入输出流 |
void flush() throws IOException | 将输出流中缓冲区的数据全部强制送出 |
rows IOException | 将输出流中缓冲区的数据全部强制送出 |
void close() throws IOException | 关闭流释放资源 |