问题1:
  写入和读取流都会进行Unicode码和本地机器码的转换工作,但是在哪个步骤进行这一转换?
  1写代码--2保存--3编译--4运行  在这4个步骤当中,它在哪个步骤进行 输出流 和 输入流 的转换呢??问题2:  我不知道对流、缓冲区理解的对不对,所以搞了张图,想让各位高手帮忙指点下,以免误入歧途。  我的理解是:内存首先会提供一块缓冲区、但是我们自己可以再创建一块缓冲区,但是这块缓冲区是对传进来的流进行操作的,所以呢我们把传进来的流称为“底层流”。
  为什么我么自己要创建缓冲区呢?因为流就好像一条水管,无论我们处理的速度有多块,它流出来的量确是固定的,所以呢,我们可以拿个水池来接流出来的水量,这样呢我们每次处理的量就有水池那么大,自然运行效率就提高了,不知道理解的对不对.

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【llm0528】截止到2008-07-02 15:08:00的历史汇总数据(不包括此帖):
    发帖的总数量:35                       发帖的总分数:700                      
    结贴的总数量:34                       结贴的总分数:700                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:97.14 %               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    值得尊敬
      

  2.   

    1 我觉得实在编译时进行的转换工作。二进制文件都是机器码吧。
    2 你要明白水池开始就已经存在,并不是你生成的水池。
      流只是对内存使用的一种方法。进行整个水池的操作也是可以的。只是java不用指针。
      

  3.   

    问题1:是运行时完成编码转换的,在编译时编译器怎么知道程序运行时你要读写哪个文件呀!对文件以字符流(不是字节流)方式读写时(使用 FileReader/FileWriter)会自动完成编码转换。
    问题2:我们为什么要在河流上建水库?一样的道理。
      

  4.   

    对于输入流:  
          
    当程序请求从Buffered流中读取数据时,这个Buffered流先从缓冲区中读取(开始的时候这个缓冲区是空的,它也不是自动从输入流
    中读取出来的),如果Buffered流发现从缓冲区中已经无法读取出数据了,则它从输入流中一次性读取一大段数据回来到缓冲区。Bu
    ffered流返回程序所需要的长度的数据,剩下的数据还是留在缓冲区中等待程序下次读取  
       
     程序<—— Buffered流<——缓冲区<—— 输入流
       
       
      对于输出流:  
          
    程序写数据时,Buffered流先将这些数据写到缓冲区中,当这个缓冲区已经满了或者程序调用了flush方法时,才一次性的将数据写
    入真正的流中   程序——> Buffered流——>缓冲区—> 输出流
     
       
      这个Buffered是为了减少从真正数据流中读取的次数的。