---------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
与字符流不同的是,使用的是系统默认的编码方式!
写入流写入数据的时候不用使用flush()方法刷
可以读写媒体文件,尽量不用字符流读写媒体文件
流操作的基本操作规律:
通过两个明确来完成:
1.明确源和目的。
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
1. 1操作的数据是否是纯文本
是:字符流
否:字节流
1.2当体系明确后,再明确要使用哪个具体的对象
通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
例如:将一个文本文件中的数据储存到另一个文件中,复制文件。
明确源:硬盘文本
1.读取流 InputStream Reader
1.1纯文本?
是,选择Reader
1.2接下来明确要使用体系中的哪个对象。
明确源设备:硬盘上的文件
Reader体系中可以操作文件的对象时FileReader
是否需要提高效率:是!加入Reader体系中缓冲区BufferedReadr
FiledReader fr = new FileReader("a.txt");
BufferedReadr bufr = new BufferedReadr(fr);
明确目的:硬盘文本
1.输出流OutputStream Writer
1.1纯文本?
是,选择Writer
1.2设备:硬盘
Eriter体系中可以操作文件的对象FileWriter
是否需要提高效率:是!加入FileWriter体系中缓冲区BufferedWriter
FiledWriter fw = new FileWriter("b.txt");
BufferedWriter bufw = new BufferedWriter(fw);
例如:需求:将键盘录入的数据保存到一个文件中
明确需求:
1.读取流都存在
1.1纯文本?是(从键盘接受的就是纯文本)
1.2设备:键盘对应的对象是System.in
不是选择Reader吗?System.in对应的不是字节流吗?
为了方便文本数据,将字节流转换成字符流
既然明确了Reader,那么就将System.in转换成Reader
用了Reader体系中转换流,InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
是否需要提高效率:是!BufferedReadr
BufferedReadr bufr = new BufferedReadr(isr);
扩展:使用指定码表进行储存
明确目的:
1.1纯文本?是
1.2设备:硬盘
一个文件,使用FileWriter
但是储存时需要按照指定码表,而指定的编码表只有转换流可以指定
所以要使用的对象是OutputStreamWriter,而该转换流对象要接受一个字节输出流,
还可以操作文件的字节输出流,FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt","utf-8"));
是否需要提高效率:是!
BufferedWriter bufw = new BufferedWriter(osw);
所以,转换流是字符和字节之间的桥梁,通常涉及到字符的编码的转换时使用!