DataInputStream in5 =
          new DataInputStream(
            new BufferedInputStream(
              new FileInputStream("Data.txt")));这个构造器是为了表达什么意思?

解决方案 »

  1.   

    只是因为不能直接new,要通过中介
      

  2.   

    new FileInputStream("Data.txt");
    是最基本的读取数据的流, 其他的流都不能直接访问数据,而只是对读取过程或者读取到的数据进行加工, 外面2层 流都是过滤器, 并不能直接读取数据, 需要把这个取数据的任务转交给 FileInputStream 完成,new BufferedInputStream 负责对数据进行缓冲,new DataInputStream 负责将 数据以 字节方式转换成以字符方式处理。 
                   读取字节                   缓冲读取到的字节               转换成字符流
    FileInputStream------->BufferedInputStream---------------->DataInputStream-------->由此构成 过滤管道, 后面2个因为没有数据来源而转发请求给前面的,所以构造时需要一个能读到数据的流作为参数。
      

  3.   

    这是设计模式中的装饰模式(Decorator)。一个类是另外一个类的初始化参数。这样的好处是:
    用DataInputStream,BufferedInputStream和 FileInputStream就能组合出他们组成的所有组合,例如:
    DataInputStream+BufferedInputStream
    BufferedInputStream+FileInputStream
    DataInputStream+BufferedInputStream+FileInputStream
    DataInputStream+FileInputStream+BufferedInputStream
    但如果不用这方法来达到这效果,必须写很多的类来实现,不简洁
      

  4.   

    DataInputStream in5 =
              new DataInputStream(
                new BufferedInputStream(
                  new FileInputStream("Data.txt")));
    new DataInputStream的时候需要一个BufferedInputStream参数,那就new 一个BufferedInputStream对像,而new BufferedInputStream需要一个FileInputStream对像参数,那就new 一个FileInputStream象了