首页 > 代码库 > 如何选择流对象?

如何选择流对象?

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);

所以,记住,转换流什么时候使用,字符和字节之间的桥梁。通常,涉及到字符编码转换时,需要用到转换流。