一、Java 中IO流四大抽象基类
二、InputStream:字节输入流
1、InputStream 类概述
java.io.InputStream 抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。
2、InputStream 类继承结构
3、常用子类
InputStream 是所有字节输入流的基类,典型实现为:FileInputStream。
FileInputStream 从文件系统中的某个文件中获得输入字节。 FileInputStream 用于读取非文本数据之类的原始字节流。要读取字符流, 需要使用 FileReader。
InputStream 的子类:
深色的为节点流,浅色的为处理流。
4、常用方法
它定义了字节输入流的基本共性功能方法。
int read()
从输入流中读取数据的下一个字节。 返回 0 到 255 范围内的 int 字节值。 如果因为已经到达流末尾而没有可用的字节, 则返回值 -1。
int read(byte[] b)
从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 如果因为已经到达流末尾而没有可用的字节, 则返回值 -1。 否则以整数形式返回实际读取的字节数。
int read(byte[] b, int off,int len)
将输入流中最多 len 个数据字节读入 byte 数组。 尝试读取 len 个字节, 但读取的字节也可能小于该值。 以整数形式返回实际读取的字节数。 如果因为流位于文件末尾而没有可用的字节, 则返回值 -1。
public void close() throws IOException
关闭此输入流并释放与该流关联的所有系统资源。
注意:
① 如果 read() 方法到达流末尾没有可用的字节,返回-1;
② close 方法,当完成流的操作时,必须调用此方法,释放系统资源;
5、
三、Reader:字符输入流
1、Reader 类概述
java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。
2、Reader 类继承结构
3、常用子类
Reader 抽象类的子类结构:
注意:深色的为节点流,浅色的为处理流。
4、常用方法
它定义了字符输入流的基本共性功能方法。
public int read()
读取单个字符。 作为整数读取的字符, 范围在 0 到 65535 之间 (0x00-0xffff)(2个字节的Unicode码) , 如果已到达流的末尾, 则返回 -1
public int read(char[] cbuf)
将字符读入数组。 如果已到达流的末尾, 则返回 -1。 否则返回本次读取的字符数。
public int read(char[] cbuf,int off,int len)
将字符读入数组的某一部分。 存到数组cbuf中, 从off处开始存储, 最多读len个字符。 如果已到达流的末尾, 则返回 -1。 否则返回本次读取的字符数。
public void close() throws IOException
关闭此输入流并释放与该流关联的所有系统资源。
注意:上面的 read() 方法,如果流中没有数据可读,统统返回 -1。
5、
四、OutputStream
1、OutputStream 类概述
java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。
2、OutputStream 类继承结构
3、常用子类
FileOutputStream 从文件系统中的某个文件中获得输出字节。 FileOutputStream 用于写出非文本数据之类的原始字节流。 要写出字符流, 需要使用 FileWriter。
java.io.OutputStream 该为作为一个抽象类,下面有很多的子类。
图中深色的为节点流,浅色的为处理流。
4、常用方法
该类中定义了字节输出流的基本共性功能方法:
public void write(int b)
将指定的字节写入此输出流。 write 的常规协定是:向输出流写入一个字节。 要写入的字节是参数 b 的八个低位。 b 的 24 个高位将被忽略。 即写入0~255范围的。
public void write(byte[] b)
将 b.length 个字节从指定的 byte 数组写入此输出流。 write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同。
public void write(byte[] b,int off,int len)
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
public void flush()throws IOException
刷新此输出流并强制写出所有缓冲的输出字节, 调用此方法指示应将这些字节立即写入它们预期的目标。
public void close() throws IOException
关闭此输出流并释放与该流关联的所有系统资源。close 方法,当完成流的操作时,必须调用此方法,释放系统资源。
5、
五、Writer:字符输出流
1、Writer 类概述
java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。
2、Writer 类继承结构
3、常用子类
Writer 抽象类下面的子类结构:
图中深色的为节点流,浅色的为处理流。
4、常用方法
它定义了字节输出流的基本共性功能方法:
void write(int c)
写入单个字符。 要写入的字符包含在给定整数值的 16 个低位中, 16 高位被忽略。 即写入0 到 65535 之间的Unicode码。
void write(char[] cbuf)
写入字符数组。
void write(char[] cbuf,int off,int len)
写入字符数组的某一部分。 从off开始, 写入len个字符
void write(String str)
写入字符串。
void write(String str,int off,int len)
写入字符串的某一部分,off 字符串的开始索引,len 写入的字符个数。
void flush()
刷新该流的缓冲, 则立即将它们写入预期目标。
public void close() throws IOException
关闭此输出流并释放与该流关联的所有系统资源。
因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来替换字符数组,即以 String 对象作为参数
void write(String str);
void write(String str, int off, int len);
5、
六、注意点
程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源。