IO流
什么是IO流? I:Input,O:Output
通过IO流可以完成以内存为参照物,对硬盘的读和写。
IO流的分类
输入流、输出流、字节流、字符流
分类方式:
-
按照流的方向进行分类:(以内存为参照物)
往内存中去,叫做读(Read)或叫做输入流(Input)
往硬盘中去,叫做写(Write)或叫做输出流(Output) -
按照读取数据的方式不同进行分类:
(1) 按照字节的方式读取数据,一次读取一个字节(byte)等同于一次读取8个二进制位。这种读取方式的流是万能流,什么类型的文件都可以读取,包括文本、图片、音频、视频等。 假设文件file.txt,采用字节流的话,是这样读取的: file.txt文件内容: a中国bc张三fe 第一次读取:一个字节:正好读到'a'. 第二次读取:一个字节:正好读到'中'字符的一半 第三次读取:一个字节:正好读到'中'字符的另一半 ......
(2)按照字符的方式读取数据,一次读取一个字符。
这种流是为了方便读取普通文本文件而存在的,只能读取纯文本文件 假设文件file.txt,采用字符流的话,是这样读取的: file.txt文件内容: a中国bc张三fe 第一次读取:一个字符:正好读到'a'. 第二次读取:一个字符:正好读到'中' 第三次读取:一个字符:正好读到'国' ......
IO流四大家族
都是抽象类(abstract class),无法实例化对象
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流
java.io.Reader 字符输入流
java.io.Writer 字符输出流
注意:
-
在Java中只要"类名"以"Stream"结尾的,都是字节流,
以"Reader/Writer"结尾的,都是字符流 -
所有的流都是实现了java.io.Closeable接口,都有close()方法,是可关闭的.
* 流毕竟是一个连接内存和硬盘之间的通道,
用完之后一定要关闭,不然会消耗(占用)很多资源. -
所有的输出流都实现了java.io.Flushable接口,都有flush()方法,是可刷新的.
* 养成好习惯,输出流在最终输出之后,一定要记得flush()刷新,
刷新表示将通道当中剩余未输出的数据强行输出完(清空管道).
* 如果没有flush()可能会导致数据的丢失.