黑马程序员 【】java学习之路——IO流使用解析

                                              ------- android培训java培训、期待与您交流! ----------

在学习IO流时最痛苦的是流对象有很多,不知道该用哪一个?下面简单总结一下如何选择哪一个对象:

通过三个个明确来完成用哪一个:

1:明确源和目的

   源:输入流。InputStream(操作字节流), Reader(操作字符流);

   目的:输出流。OutputStream(操作字节流),Writer(操作字符流);

2:操作的数据是否是纯文本。

   是:字符流。

   否:字节流。

3:当体系明确后,在明确要使用哪个具体的对象。

通过设备来进行区分:

源设备:内存、硬盘、键盘

目的设备:内存,硬盘,控制台。

                                     例子:需求::讲一个文本文件存储到另一个文件中。复制文件。

分析:

源:因为是源,所以使用InputStreamReader

是不是操作文本文件。

是:这时就可以选择Reader

这样体系就明确了。

接下来明确要使用该体系中的哪个对象。

明确设备:硬盘 上的一个文件

Reader体系中可以操作文件的对象是FileReader

是否需要提高效率:是!加入Reader体系中缓冲区BuffereReader

FileReader fr = new FileReader();

BufferedReader br = new BufferedReader(fr);

目的:OutpuStreamWriter

是否是纯文本

是!Writer

设备:硬盘 上的一个文件

Writer体系中可以操作文件的对象FileWriter

是否需要提高效率 是!加入Writer体系缓冲区BufferedWriter

FileWriter fw = new FileWiter();

BufferedWriter bw = new BufferedWriter(fw);

 

                                                例子:需求::将键盘录入的数据保存到一个文件中。

需求分析:

源“InputStreamReader

是不是纯文本:

是!Reader

设备:键盘;对应 的对象是System.in

不是选择Reader吗?System.in对应的不是字节流吗?

答:为了操作键盘的文本数据操作方便,转成字符流,按照字符串操作最方便。

所以将System.in转换成字符流Reader,用到了Reader

体系中的转换流:InputStreamReader

InputStreamReader isr = newInputStreamReade(System.in);

需要提高效率吗?
需要:BufferedReader

BufferedReader br = newBufferedReader(isr);

 

目的:

OutputStream Writer

是否是纯文本?是Writer

设备:硬盘  一个文件使用FileWriter

FileWriter fw = new FileWriter(“c.txt”);

需要提高效率吗?

BufferedWriter bufw = newBufferedWriter(fw);

扩展一下:想要把录入的数据按照指定的编码表utf-8将数据存到文件中。

目的:

OutputStream Writer

是否是纯文本?是Writer

设备:硬盘  一个文件使用FileWriter

但是FileWrite是使用默认的编码表GBK

但是存储时需要加入指定的编码表,而指定的编码表只有转换流可以指定。

所以要使用的对象是OutputStreamWriter

而该转换流对象要接收一个字节流,而且还可以操作文件的字节输出流。FileoutputStream

 OutputStreamWriter osw = new OutputStream(newFileOutputStream(“d.txt”),utf-8);

需要提高效率吗?

BufferedWriter bufw = new BufferedWriter(osw);

所以记住:转换流什么时候使用?

字符和字节之间的桥梁,通常涉及到字符编码转换时,需要用到转换流。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值