黑马程序员--字符流缓冲区对象,装饰设计模式,字节流,字节流的缓冲区对象,转换流对象

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------

1.      第二十天回顾, try catch finally throw throws.编译和运行的区别。运行出问题改源码,编译异常,使用try..catch  子类父类的方法异常,记住特点。 Writer,Reader 子类FileWriter,FileReader,构造方法全部写String文件名,write read 记住写和读的字符数组,使用流对象如果是字符输出请你务必flush,不要忘了关闭资源close。掌握文件的赋值,读写字符数组来实现

 

2.      第二十一天学习内容:字符流缓冲区对象BufferedRead BufferedWriter,readLine,newLine.装饰设计模式,自己实现readLine功能。字节流,InputStream,OutputStream,实现任意文件的读写,字节流的缓冲区对象BufferedInputStream,BufferedOutputStream。转换流对象,字节转字符InputStreamReader字符转成字节OutputStreamWriter

 

3.      字符输出流缓冲区对象BufferedWriter类

  缓冲区提高流的读写效率而出现

  BufferedWriter,也是Writer的子类,Writer类的方法都可以用的,使用缓冲区对象,必须有一个流对象配合使用

  BufferedWriter类的构造方法  BufferedWriter(Writer w)参数是一个字符输出流,我们现在的字符输出流,FileWriter  ,将这个输出流FileWriter类的对象,传递给BufferedWriter的构造方法  BfferedWriter(new FileWriter),BufferedWriter这个缓冲区,将提高FileWriter的写如效率。

缓冲区特有方法  void newLine()文本中,写换行。可以写\r\n还是用newLine(),如果需要文本的换行,需要使用newLine()实现,这个方法具有跨平台性

Windows,换行\r\n    Linux换行\n . 如果安装的JDK是Windows版本的,newLine()方法中写的就是\r\n, 安装的JDK是Linux版本,newLine()方法写的就是\n

 

4.      字符输入流的缓冲区对象BufferedReader类

  缓冲区提高流的读取效率

  BufferedReader也是Reader的子类,Reader的方法,都可以用

  需要一个输入流对象,配合使用

  BufferedReader构造方法,BufferedReader(Reader r)参数是一个字符输入流,现在的字符输入流FileReader ,将这个流对象,传递给BufferedReader构造方法,

  BufferedReader(newFileReader)缓冲区就可以提高FileReader的读取效率,读取一行

  String readLine()读取文本一行,返回字符串

 

5.      复制文本文件使用缓冲区

  BufferedReader读一行,BufferedWriter写一行,写换行,刷新

  需要4个 FileReader,FileWriter

  文本复制三种形式,单个字符,字符数组,缓冲区的行读写

 

6.      装饰设计模式

  出现意义,增强原有对象的功能

  BufferedReader,BufferedWriter装饰类,装饰流

  BufferedReader出现的目的,增强原有流对象Reader的功能

  装饰设计在Java的IO中,使用的最广泛

  根据刚才案例,对地面进行了装饰。

  继承和覆盖,继承原有的地面类,重写承重方法,我们采用装饰模式也是可以实现的

  继承覆盖和装饰区别在哪里

  继承OOP思想的一个特征,设计模式都是基于OOP思想出现的

  一组流对象,都是用来读取功能

  继承来扩展程序:

   Reader

       文本类TextReader

          extendsTextReader

       音乐类SoundReader

          extendsSoundReader

       游戏类GameReader

          extendsGameReader

       电商类

           电商子类

  以上的类,功能不够,可以选择继承覆盖方法,单继承,每一个读取流,都会跟随一个子类出现.发现整个的继承体系,过于庞大,臃肿(冗余),学习者压力很大了,开发者使用的类就会更多

 

  装饰模式,解决问题

  Reader

      文本类TextReader

      音乐类SoundReader

      游戏类GameReader

     装饰类  BufferedReader(Reader r )

  使用一个装饰类,把整个Reader体系全部装饰起来,需要一个类就够了

  装饰设计,继承体系简单整洁,适合学,适合开发

  继承和装饰的最大区别就是继承体系问题

 

7.      BufferedReader读取行的原理

  BufferedReader是一个装饰类,提高原有流对象的功能

 BufferedReader(FileReader)

  实现读取,还是依靠FileReader的read方法实现

  读取单个字符的同时,判断是不是\r如果是,不理会直接在读

  判断是不是\n 如果是行结束,返回字符串

  如果读取到的字符,不是\r不是\n 将字符追加到缓冲区StingBuilder

 

8.      自定义装饰类,实现读取一行的功能

  依照BufferedReader类的readLine方法原理,自己实现

  读取到行,返回一个字符串,如果读取到文件的结尾,返回null

  readLine方法返回值中,没有换符,写的方法,需要别人使用,传递给我一个字符输入流,装饰这个输入流

  流的技术,读取单个字符read(),字符串的缓冲区。调用者需要循环调用自己的读取一行功能

 

9.      OutpuStream字节输出流

  字节输出流,写任意文件write 写字节数组,单个字节

  是抽象类,不能直接用,找子类 FileOutputStream

  构造方法,传递String的文件名。

  字节流写数据的时候,不需要刷新,但是要关闭

 

10.  InputStream字节输入流

 字节输入流,读取任意文件read 读取字节数组,读单个字节

 是抽象类,不能直接用,找子类 FileInputStream

 构造方法,传递String的文件名 read方法读取文件结尾返回-1

 read(字节数组)利用数组作为缓冲,提高流的读取效率

 根据字符流的原理,字节流中的read()读取到的字节存储到字节数组中,返回读取一次的字节数中有效字节个数,文件末尾返回-1

 字节输入流的方法  int  available()返回字节输入流中封装的文件的字节数

 

11.  BufferedOutputStream,BufferedInputStream字节流的缓冲区

  和字符流缓冲区用法很像,字节流,没有行概念

  BufferedOutputStream构造方法,传递字节输出流,写入的方法写单个字节,字节数组,没有行!!

  BufferdInputStream 构造方法,传递字节输入流,读取的方法,单个字节,字节数组

  字节流缓冲区复制文件。

 

12.  键盘输入

    System.in 引用类型的成员变量  返回一个InputStream的子类对象

    InputStream in =System.in;

    返回一个字节输入流对象,调用流中的方法read()读取

    使用BufferedReader中的readLine直接读取键盘一行,但是不行

    System.in字节流, readLine字符流

 

13.   转换流--字节转成字符

    InputStreamReader本身是一个字符流,继承Reader,字节流向字符的桥梁

    InputStreamReader是字符,BufferedReader能不能缓冲这个转换流

   BufferedReader(Reader r) 可以缓冲这个转换流,进行行读取

    InputStreamReader构造方法中,传递字节输入流 ,参数写的是InputStream.

    但是,毕竟转换流是字符流,处理文本数据

 

14.  控制台输出

   System.out 引用类型的成员变量  返回一个PrintStream ,看到这个类的名字后缀是一个Stream,是字节流,继承OutputStream,肯定是一个字节输出流对象。

  刚才我们的程序,读取的控制台输入,用的是字符流的readLine读取的键盘输入,将读取到的字符,输出到System.out中去,肯定不行,readLine读取到的是字符数据, System.out返回的是字节输出流

 

15.  转换流--字符转成字节流

  OutputStreamWriter, 继承Writer,也是一个字符流

  字符流向字节的桥梁

  构造方法,传递字节输出流OutputStreamWriter(OutputStream out)构造器中,可以传递任意的字节输出流

 

16.  转换流好处

  InputStream in =System.in

  OutputStram out =System.out

  转换流的好处,在于数据源和数据目的,可以随时发送变化

  读取键盘输入,将输出到的内容,转成大写,保存文本中

     数据源,键盘 ,目的 文件

 

  读取一个Java文件,所有的内容,转成大写,输出控制台

    数据源,文件  目的控制台

 

  读取一个Java文件,所有的内容,转成大写,输出另一个文件

    数据源,文件 目的是文件

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值