读Core Java2 7 
Java核心技术第7版的579页,
DataInputStream din=new DataInputStream(
 new BufferedInputStream(
  new FileInputStream("employee.dat")
 )
 );
用FileInputStream构造DataInputStream流
为什么还要加一个BufferedInputStream呢?
如何确定这么多层的构造函数呢?我怎么知道
要得到DataInputSteam需要BufferedInputStream呢?

解决方案 »

  1.   

    这是一种装饰器设计模式,可以通过API DOC查看构造方法参数为InputStream类型的,
    都可以往里面扔InputStream的子类。
      

  2.   

    你可以不放BufferedInputStream啊,直接放FileInputStream也是可以的,
    只不过BufferedInputStream对FileInputStream再次进行了包装,可以采
    用缓冲区提高读取的效率。
      

  3.   

    Java核心技术 卷I  580页 
    DataInputStream din=new DataInputStream
     (
       pbin=new PushbackInputStream(
        new BufferedInputStream(
         new FileInputStream("employee.dat")
        )
       )
     );
    这段代码中,为什么要用PushbackInputStream去构造
    生成DataInputStream呢?
    最后生成的DataInputStream从PushbackInputStream
    上得到什么功能了呢?它是不可以使用PushubackInputStream类的成员方法啊
      

  4.   

    缓冲流。使用缓冲可以提高效率。
    这好比你将一堆砖头从A地搬到B地,不使用缓冲就好比你一次搬一块,使用缓冲则好比你用推车,先把车装满再一次搬走,显然后者效率更高。至于如何构造一个流,方式是多种多样的,DataInputStream不一定要用一个BufferedInputStream来构造,只要是InputStream的子类都可以,所有输入输出流都采用这种类似的方式来构造,这样,你不需要遵循特定的顺序,只要依照你的要求来构造就可以,比如你完全可以先构造一个DataInputStream,再构造在此基础上构造BufferedInputStream,最终都是你想要的,这好比你穿衣服,可以先穿上衣,再穿裤子,也可以先穿裤子,再穿上衣,得到的结果是一样的。这种方式叫做“Decorating(装饰)”,有兴趣可以看看设计模式中的Decorator模式。
      

  5.   

    你不需要遵循特定的顺序,只要依照你的要求来构造就可以,比如你完全可以先构造一个DataInputStream,再构造在此基础上构
     ~~~~~~~~~~~~~~~~~~
    造BufferedInputStream,最终都是你想要的
                              ~~~~~~~~~~~~~~构造顺序还是有关系的吧
    如果这样构造
    DataInputStream   din=new   DataInputStream( 
      new   BufferedInputStream( 
        new   FileInputStream("employee.dat") 
      ) 
      ); 
    得到的是一个DataInputStream的对象
    如果
    BufferedInputStream   din=new   BufferedInputStream( 
      new   DataInputStream( 
        new   FileInputStream("employee.dat") 
      ) 
      ); 
    得到的是BufferedInputStream的对象,对象不同,可以调用的
    方法就不同,对吗?
      

  6.   

    DataInputStream din=new DataInputStream
    (
      pbin=new PushbackInputStream(
        new BufferedInputStream(
        new FileInputStream("employee.dat")
        )
      )
    );
    这段代码中,为什么要用PushbackInputStream去构造
    生成DataInputStream呢?
    最后生成的DataInputStream从PushbackInputStream
    上得到什么功能了呢?它是不可以使用PushubackInputStream类的成员方法啊 这个问题 如何解释?????!!!!!