字节流
InputStream OutputStream BufferedInputStream BufferedOutputStream
读取转换流
InputStreamReader

键盘的常见写法
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ));
流操作规律
1 明确源和目的
源:输入流 ,InputStream Reader
目的: 输出流 , OutputStream Writer
2 操作的数据是否是纯文本
是:字符流
否:字节流
3 当体系明确后, 在确定使用哪个流对象
通过设备来区分
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
流操作实例
1 将一个文本文件数据复制到另一个文本文件中,复制文件
源:因为是源,所以使用读取流,InputStream Reader
因为是操作文本文件,所以选择Reader
明确Reader体系中的具体对象 明确设备:硬盘 文件 。Reader体系中可以操作文件的对象是:FileReader
是否需要提高效率: 是, 加入Reader体系中缓冲区 BufferedReader
FileReader fr = new FileReader("demo.text");
BufferedReader br = new BufferedReader(fr);
目的:写入流,OutputStream Writer
操作文本 Writer
设备:硬盘 文件
Writer体系中可以操作文件的对象是:FileWriter
是否需要提高效率: 是, 加入Writer体系中缓冲区 BufferedWriter
FileWriter fw = new FileWriter("demo1.txt");
BufferedWriter bw = new BufferedWriter(fw);
2 将键盘录入的数据保存到一个文件中
源:InputStream Reader
是纯文本 Reader
设备:键盘 对应的对象是 System.in System.in对应的是字节流
为了操作键盘的文本数据方便,将字节流转换成字符流 使用Reader体系中的转换流:InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
为了提高效率,加入缓冲区
BufferedReader br = new BufferedReader(isr);
目的:OutputStream Writer
是文本文件 : Writer
设备:硬盘, 文件 使用FIleWriter
FileWriter fw = new FileWriter("demo.txt");
为了提高效率 加入缓冲区
BufferedWriter bw = new BufferedWriter(fw);
问题:将要把录入的数据按编码表(UTF-8)存入文件中
目的:OutputStream Writer
是文本文件 : Writer
设备:硬盘, 文件 使用FIleWriter FileWriter使用的是默认的编码表 GBK
使用编码表只有转换流可以指定 所以使用的对象是OutputStreamWriter
OutputStreamWriter对象需要接收一个字节输出流,而该字节输出流需要操作文件:FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("demo.txt"), "UTF-8");
为了提高效率
BufferedWriter bw = new BufferedWriter(osw);
转换流什么时候使用: 字符流与字节流之间的桥梁,通常涉及到字符编码的转换时需要用到转换流。