黑马程序员_java流操作的基本规律

------- android培训java培训java博客、java学习型技术博客、期待与您交流! ----------

 

我们最痛苦的就是流对象有很多,不知道该用哪一个。

通过三个明确来完成:
1、明确源和目的。
   源:输入流。InputStreaam Reader
   目的:输出流。OutputStream  Writer。

2、操作的数据是否是纯文本。
   是:字符流。
   不是:字节流。

3、当体系明确后,在明确要使用哪个具体的对象。
   通过设备来进行区分:
   源设备:内存、硬盘、键盘。
   目的设备:内存、硬盘、控制台。
例一:
    将一个文本文件中数据储存到另一个文件中,复制文件。

    源:因为是源,所以使用读取流。InputStream Reader
    是不是操作文本文件。
    是:这时就可以选择Reader
    这样体系就明确了。

    接下来明确要使用该体系中的哪个对象。
    明确设备:硬盘。上一个文件。
    Reader体系中可以操作文件的对象是FileReader

    是否要提高效率?是:加入Reader体系中缓冲区 BufferedReader。

    FileReader fr=new FileReader("a.txt");
    BufferedReader buf=new BufferedReader(fr);

    目的:OutputStream Writer
    是否是纯文本?
    是:Writer。
    设备:硬盘,一个文件。
    Writer体系中可以操作文件的对象是FileWriter。

    是否要提高效率?是:加入Writer体系中缓冲区 BufferedWriter。

    FileWriter fw=new FileWriter(b.txt);
    BufferedWriter bw=new BufferedWriter(fw);    
=========
2、需求:将键盘录入的数据保存到一个文件中。
   这个需求中有源和目的都存在。
   那么分别分析
   源:InputStream  Reader
   是不是纯文本?是:Reader

   设备:键盘。对应的对象是Syetem.in。
   不是选择Reader吗?System.in对应的不是字节流吗?
   为了操作键盘的文本数据方便。转成字符流按照字符串操作是最方便的。
   所以既然明确了Reader,那么久将System.in转换成Reader。
   用了Reader体系中转换流,InputStreamReader

   InputStreamReader isf=new InputStreamReader(System.in);

   需要提高效率吗?需要:BufferedReader
   BufferedReader bufr=new BufferedReader(isf);

   目的:OutPutStream Writer
   是否是纯文本?是:Writer。
   设备:硬盘。一个文件。使用FileWriter。
   FileWriter fw=new FileWriter("c.txt");
   需要提高效率吗?需要
   BufferedWriter bufw=new BufferedWriter(fw);

***************
 扩展:想要吧录入的数据按照指定的编码(utf-8),将数据存到文件中。

   目的:OutputStream  Writer
   是否是纯文本?是:Writer。
   设备:硬盘,一个文件。使用FileWriter。
   但是FileWriter是使用的默认编码表,GBK。

   但是存储时需要加入指定编码utf-8.而指定的编码表只有转换流可以指定。
   所以需要使用对象是OutputStreamWriter。
   而该转换流对象要接收一个字节输出流。而且还可以操作的文件的字节输出流。FileOutputStream

   OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("a.txt"),"UTF-8"); 

   需要提高效率吗?需要。
   BufferedWriter bufw=new BufferedStreamWriter(osw);
  
   所以,记住,转换流什么使用,字符和字节之间的桥梁,通常,涉及到字符编码转换时。需要用到转换流。


                             ------- android培训java培训java博客、java学习型技术博客、期待与您交流! ----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_wangtao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值