流操作的基本规律:
最痛苦的就是流对象很多,不知道用哪个,那我们可以
通过三个明确来完成。
1.明确源和目的。
源:输入流。InputStream Reader
目的:输入流。OutputStream Writer.
2.操作的数据是否是纯文本。
是:字符流
不是:字节流
3.当体系明确后,再明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘,键盘。
目的设备:内存,硬盘,控制台。
最后问自己一句,是否需要提高效率: 加入缓冲区
例子:
需求:将键盘录入的数据保存到一个文件中
这个需求中有源和目的都存在。
那么分别分析
源:InputStream Reader
是不是纯文本?是!Reader
设备:键盘。对应的对象是System.in
问?:不是选择Reader吗?System.in对应的不是字节流吗?
为了操作键盘的文本数据方便。转成字符流按照字符串操作是最方便的。
所以既然明确了Reader,那么就将System.in转换成Reader.
用了Reader体系中转换流,InputStreamReader
InputStreaReader isr=new InputStreamReader(System.in);
需要提高效率! BufferedReader
BufferedReader bufr=new BufferedReader(isr)
目的:OutputStream Writer
是否存文本,是! Writer
设备:硬盘。一个文件。使用FileWriter.
FileWriter fw=new FileWriter("c.txt")
需要提高效率?需要
Bufferedwriter bufw=new BufferedWriter(fw)
扩展:
想要把录入的数据按照指定的编码表(utf-8)将数据存到文件中
目的:OutputStream Writer
是否存文本,是! Writer
设备:硬盘。一个文件。使用FileWriter.
但是FileWrier是使用的默认编码表。GBK
但是存储时,需要加入指定编码表utf-8。而指定的编码表只有转换流可以指定
所以要使用的对象是OutputStreamWriter
而该转换流对象要接受一个字节输出流,而且还可以操作的文件的字节输出流。FileOutputStram
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8")
需要提高效率?需要
Bufferedwriter bufw=new BufferedWriter(osw)
所以转换流通常涉及到字符编码转换时使用 OutputStreamWriter InputStreamReader