前言
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据(硬盘到内存),输出流表示向一个目标写数据(内存到硬盘)。
java中所有的流都在java.io.*下。
一、流的分类
按流的方向分:输入流、输出流
按读取方式分:字节流(万能的,什么数据否可以读取)、字符流(只能读取纯文本,连Word都读取不了)。
二、流的四大家族首领
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流
java.io.Reader 字符输入流
java.io.Writer 字符输出流
注意:四大家族的首领都是抽象类,所有的流都是可关闭的,都实现了Closeable接口,都有close()方法,养成好习惯,流用完后一定要关闭。所有的输出流都实现了java.io.Flushable接口,都是可刷新的,都有flush()方法,养成一个好习惯,输出流在最终输出之后,一定要记得flush()刷新一下,这个刷新表数将通道中剩余未输出的数据强行输出完。清空管道。如果没有flush()可能会导致数据丢失。
注意:在java中只要“类名”以stream结尾的都是字节流,以“Reader/Writer”结尾的都是字符流。
三、需要掌握的流有16个
文件专属
java.io.FileInputStream
java.io.FileOutputStream
java.io,FileReader
java.io.FileWriter
转换流(将字节流转换为字符流)
java.io.InputStreamReader
java.io.OutputStreamWriter
缓冲流专属
java.BufferedReader
java.io.BufferedWriter
java.io.BufferedOutputStream
java.io.BufferedInputStream
数据流专属
java.io.DataInputStream
java.io.DataOutputStream
标准输出流
java.io.PrintWriter
java.io.PrintStream
对象专属流
java.io.ObjectInputStream
java.io.ObjectOutputStream