首页 > 代码库 > 如何选择流对象?
如何选择流对象?
1.明确源和目的
源:输入流
InputStream
Reader
----------------
目的:输出流
OutputStream
Writer
2.操作的数据是否是纯文本
是:字符流
不是:字节流
3.当体系明确后,在明确要使用哪个具体的对象。
通过源设备来进行区分:
1.内存
2.硬盘
3.键盘
目的设备:
1.内存
2.硬盘
3.控制台
--------------------------------------------------
1.复制文件
源:因为是源,所以使用读取流。InputStream Reader
是不是操作文本文件
是,这时就可以选择Reader,这样体系就明确了。、
接下来明确要使用该体系中的哪个对象,
明确设备:硬盘,上一个文件。
Reader体系中,可以操作文件的对象是FileReader
FileReader fr = new FileReader(“a.txt”);
是否需要提高效率?是,就加入Reader体系中的缓冲区
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer
是否是纯文本
是。Writer
设备:硬盘,一个文件。
Writer体系中可以操作文件的是FileWriter。
FileWriter fw = new FileWriter(“b.txt”);
是否需要提高效率?是,就加入Writer体系中的缓冲区
BufferedWriter bufw = new BufferedWriter(fw);
--------------------------------
需求:将键盘录入的数据保存到一个文件
源:InputStream Reader
1.是不是纯文本? 是,Reader
2.设备? 键盘。对应对象是System.in
不是选择Reader吗?System.in对应的不是字节流吗?
为了操作键盘的文本数据方便,转成字符流,按照字符串操作时最方便的。所以既然明确了Reader,那么就将System.in转换成Reader
用了Reader体系的转换流。InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
需要提高效率吗?
BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream Writer
是否是存文本?是,Writer
设备?硬盘,一个文件->FileWriter
FileWriter fw = new FileWriter(“a.txt”);
需要提高效率吗?需要
BufferedWriter bufw = new BufferedWriter(fw);
--------------------------------------------------------------------
扩展一下,想要把录入的数据按照指定的编码来存储。
目的:
是否存文本?是,Writer
设备:硬盘,一个文件FileWriter。但是FileWriter使用的是默认编码表。存储时,要指定编码,OutputStreamWriter可以指定编码
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“d.txt”,”UTF-8”));
需要高效吗?
BufferedWriter bufw = new BufferedWriter(osw);
所以,记住,转换流什么时候使用,字符和字节之间的桥梁。通常,涉及到字符编码转换时,需要用到转换流。