(2)字符流

来源:互联网 发布:mit公开课 矩阵理论 编辑:程序博客网 时间:2024/05/29 12:47
 

11,08,30

今天课堂的主要内容;

12.5  字符流

1、缓冲的字符流BufferedReader/BufferedWriter

Reader所做的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。Write将其输出立即发送到底层字符或字节流。如果没有缓冲,则每次调用read()或readLine()都会导致从文件中读取字节,并将其转换为字符后返回;每次调用print()方法都会导致将字符转换为字节,然后立即写出到文件,这些都是极其低效的。FileReader和FileWriter类以字符为单位输入\输出,数据的传输效率也很低。利用Java提供的BufferedReader和BufferedWriter类则可以缓冲区方式进行高效的输入\输出。

2、使用缓冲的字符流时其实就是使用流对象的方法,只不过加入了数组,对数据进行了临时存储,为了提高操作数据的效率。

采用缓冲处理的优点:提高效率,如果没有缓存。

例如FileReader对象,每次调用read()方法进行读操作时,都会直接去文件中读取字节,转换成字符并返回,这样频繁的读取文件效率很低。

缓冲的字符流的出现提高了对流的操作效率,原理就是将数组进行封装

在使用缓冲的字符流对象时,缓冲的存在是为了增强流的功能,因此在建立缓冲的字符流对象时,要先有流对象的存在

2、public BufferedReader(Reader in) ;

public BufferedReader(Reader in, int sz) 设置缓冲区的大小。

public BufferedWriter(Writer out) ;

public BufferedWriter(Writer out, int sz);

3、BufferedReader的特有方法

public String readLine();//一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。

4、BufferedWriter的特有方法

public void newLine();//写出平台相关的行分隔符来标记一行的终止。Windows平台下为’\n’。

问题:

当Writer中子类对象过多,那么为了提高每一个对象效率,每一个对象都有 一个自己的子类Buffered。虽然可以实现,但是继承体系变的很臃肿。那么是否可以对其进行优化呢?

答案: 增加的这些子类都是在使用缓冲技术。可不可以对缓冲技术进行描述,将需要增强的对象传递给缓冲区即可。

出现的新的问题:该类虽然完成对已有两个对象的增强。但是当有新的对象出现时,还要继续在该类中添加构造函数。这样不利于扩展和维护。

答案:将对这些对象父类型进行操作即可。这就是多态,提高了程序的扩展性。同时BufferedWriter中一样具体write方法,只不过是增强后的write。所以BuferedWriter也应该是Writer中的一个子类。

5、例如:

class BufferedWriter extends Writer{

       private Writer w;

       BufferedWriter(Writer w){

              this.w = w;

       }

}

6、Writer

          MediaWriter

          TextWriter

           BufferedWriter

装饰类和被装饰类都同属于一个父类或接口。

结论:这样就会发现装饰设计模式,优化增强功能的部分。比继承要灵活很多。

 

7、方法readLine()的原理:该方法用的还是与缓冲的字符流相关联的流对象的read()方法,只不过,每一次读到一个字符,先不进行具体操作,先进行临时存储,当读取到回车标记时,将临时容器中存储的数据一次性返回。

注意,它的出现是基于流并增强了流的功能。这也是一种设计模式的体现:装饰设计模式,对一组对象进行功能的增强。

 

今天在课上,老师主要讲的就是缓冲流。带着我们做了两个例子。来巩固新知识的应用。练习了之后,老师又带领我们,自己写一个缓冲流,达到同样的功能。

这是开始上课的第二天了,感觉每天的时间都是很快的,感觉很不够用,像我现在,还是没有完成作业呢,还在写今天的课堂笔记和今天的课堂感受!老师告诉我们要写到两页,可是我貌似只能写这么多了。这就是我一天的收获。我感觉字不在多,只要是自己真实学到的,和真实的感受都表达出来就好了!老师,当您看到这些的时候,是不是也和我有同样的感受呢?呵呵。

最后,我想说。真的好难啊!好难啊!好难……..啊!

 

原创粉丝点击