看core java 1的IO这一章的layering stream filters(这什么意思)这一小节书上有句话概念类的话是
the java programmer has to combine the two into what are often called filtered streams by feeding an existing stream to the constructor of aother streamPushbackReader in= new PushbackReader
              (pin=new BufferedReader 
              (new FileReader("c:/li.txt")));
我不知道这样和
PushbackReader in= new PushbackReader
(new FileReader("c:/li.txt")));
有什么区别我做了一些实验
发现in即不可以用pin的方法
pin也不可以用in的方法还有就是:
in的指针动读取一个符,pin的指针也往后移一个字符,而pin读一行,in却不移一行的吗?它们不是同一个流吗?搞不懂,高手指教  

解决方案 »

  1.   

    BufferedReader是一个带缓冲的流,可以一次读入一定数量的字符到内存,减少程序访问硬件的次数。据java Api Spec称,该数量的默认默认值足以满足大多数的操作。比如,
     PushbackReader in= new PushbackReader
      (new FileReader("c:/li.txt")));
    in每读一个字符,都要访问硬盘上的文件。而
    PushbackReader in= new PushbackReader
                  (pin=new BufferedReader 
                  (new FileReader("c:/li.txt")));
    在第一次执行in.read()时,会把一定数量的字符读入内存。以后执行in.read(),实际上访问的是内存。in的指针动读取一个符,pin的指针也往后移一个字符。
    当而pin读一行时,in也向后移动。二者的指针的位置是一致的。
      

  2.   

    中out和in之间加了个内存缓冲,增加访问速度,同时也能使访问更灵活。
    比如你不能直接从文件里面读一句,因为流输入输出都是byte的,那么如果把读出来的先放在Buffer里面,你就可以从Buffer里面直接读一整句了。