黑马程序员———IO(中)

来源:互联网 发布:网络摄像头安装视频 编辑:程序博客网 时间:2024/06/07 04:08
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


 

字符流的缓冲区:
缓冲区的出现提高了对数据的读写效率。
对应类:
     BufferedReader
     BufferedWriter
缓冲区要结合流才可以使用。
在流的基础上读流的功能进行了增强。



缓冲区的出现是为了提高流的操作效率而出现的。
     所以在创建缓冲区之前,必须先有流对象。
该缓冲区中提供了一个跨平台的换行符。
newLine():写入一个行分隔符。 
 window版本封装的是\r\n     Linux中封装的是\n

1.创建一个字符写入流对象。
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
3.记住,只要用到缓冲区,就要刷新
4.关闭缓冲区,其实就是在关闭字符写入流对象。


字符读取流缓冲区:
     该缓冲区提高了一个一次读 一行的技术,
     返回:
          包含该行内容的字符串不包含任何行终止符,如果已到达流末尾,则返回 null

读取方法:读一个,读数组,读一行。
readLine();读一行。
skip();跳过字符。
    
1.创建一个读取流对象和文件相关联。
2.为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数。


-------------------------------------

装饰和继承:
     MyReader//专门用于读取数据的类。
          |--MyTestReader
               |--MyBufferReader
          |--MyMediaReader
               |--MyBufferMediaReader
          |--MyDataReader
               |--MyBufferDataReader

     class MyBufferReader
     {
          MyBufferReader(MyTextReader text)
          {}
          MyBufferReader(MyMediaReader media)
          {}
     }
     上面这个类扩展性极差。
     找到其参数的共同类型,通过多态的形式,可以提高扩展性。
    
     class MyBufferReader extends MyReader
     {
          private MyReader r;
          MyBufferReader(MyReader r)
          {
               this.r = r;
          }
     }

MyReader//专门用于读取数据的类。
     |--MyTextReader    
     |--MyMediaReader
     |--MyDataReader
     |--MyBufferReader

装饰模式比继承要灵活,避免了继承体系臃肿。而且降低类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的。

------------------------------------
LineNumberReader是BufferedReader的子类。
     跟踪行号的缓冲字符输入流。

     此类定义了方法setLineNumber(int)和getLineNumber().它们分别用于设置和获取当前行号。



------------------------

/*
装饰设计模式:
     当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
          那么自定义的该类称为装饰类。
     装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。


*/

//普通类
class Person
{
     public void eat()
     {
          System.out.println("吃饭");
     }
}

//装饰类,增强Person类的功能。
class SuperPerson
{
     private Person p;
     SuperPerson(Person p)
     {
          this.p = p;
     }
    
     public void superEat()
     {
          System.out.println("开胃酒");
          p.eat();
          System.out.println("甜点/餐后水果");
     }
}


public class PersonDemo {

     public static void main(String[] args) {
          Person p = new Person();
          SuperPerson sp = new SuperPerson(p);
          sp.superEat();
     }

}

    

 

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


 

0 0
原创粉丝点击