I/O流概述
I/O流概述
1、流的分类
2、流的体系结构
3、重点的流
一、流的分类
1、按照流的方向分类:输入流、输出流
以内存为参照物
① 往内存中去,叫做输入(Input),或者叫做读(Read)
② 从内存中出,叫做输出(Output),或者叫做写(Write)

2、按照数据读取方式不同分类:字节流、字符流
① 按照字节的方式读取数据,一次读取1个字节byte,等同于一次性读取8个二进制
这种流是万能的,什么类型都可以读取。包括:文本文件、图片、声音文件、视频文件等等
② 按照字符的方式读取数据,一次读取一个字符
这种流是为了方便读取普通文本,这种流不能读取图片、声音、 视频等文件,只能读取纯文本文件,连word文件都无法读取
举例 注意:中文字符在windows系统中占用两个字节、英文字符在windows系统中占用一个字节
当前有一个txt文件,里面的内容为 a中国bc欢迎你de
采用字节流是这样读的:(一个字节一个字节读)
第一次读一个字节,读‘a’
第二次读一个字节,读‘中’的字符的前一半
第三次读一个字节,读‘中’的字符的后一半
采用字符流是这样读的:
第一次读一个字符,读‘a’字符
第二次读一个字符,读‘中’字符
二、流的体系结构
四大家族的首领(抽象类):
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()可能会导致丢失数据
三、重点的流
文件专属:java.io.FileInputStream、java.io.FileOutputStream、java.io.FileReader、java.io.FileWriter
转换流(将字节流转换成字符流):java.io.InputStreamReader、java.io.OutputStreamWriter
缓冲流专属:java.io.bufferedInputStream、java.io.bufferedOutputStream、java.io.bufferedReader、java.io.bufferedWriter
数据流专属:java.io.DataInputStream、java.io.DataOutputStream
标准输出流:java.io.PrintWriter、java.io.PrintStream
对象专属流:java.io.ObjectInputStream、java.io.ObjectOutputStream


浙公网安备 33010602011771号