问题1:InputStream、OutputStream 中的close()方法,在关闭所有资源时,会自动保存吗?有个朋友说会自动保存,但是JDK上只说了关闭资源,没说会保存,所以拿出来问问大家。问题2:既然内存提供了缓冲区,我们为什么还要自己创造另一个缓冲区呢?内存提供的缓冲区是固定大小的,还是动态分配的?如果我们设置的BufferedInputStream 缓冲区大小比内存自动提供的缓冲区小怎么办??

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【llm0528】截止到2008-07-03 17:09:37的历史汇总数据(不包括此帖):
    发帖的总数量:40                       发帖的总分数:800                      
    结贴的总数量:40                       结贴的总分数:800                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    问题1、stream的保存这个概念本身就有问题吧?如果是要写(保存),outputStream是有flush方法的,调用就生效,而单纯的close本身不会有任何作用发生问题2、这个问题更没法解释了……简单说,缓冲总有临时的意思,缓冲小并不会对使用造成任何影响,只是速度快慢和效率高低而已
      

  3.   

    1.close()会释放进程所占用的资源,保存缓冲区中的数据到磁盘上要用flush()2.内存提供的缓冲区是操作系统开辟出来的,是给电脑上所有运行于操作系统上的进程共用的,而JAVA程序只是
    这些进程中的一个.如果要用内存的缓冲区,是需要操作系统来完成换入换出的
      

  4.   


    回答1:自动保存这个说法第一次听到,你可能是把输出流的关闭当成文件的关闭了(一般文件改动后没保存就关闭会出现一个对话框提示保存)。注意,这里的输出流是一个非常抽象的概念,输出流的一端是你的 Java 应用程序,另一端是数据的目的地,这个目的地可能是一个文件,可能是网络上的另一台计算机,可能是任何需要接收你 Java 应用程序生成并流淌出的数据的东西。关闭输出流只是告诉管理这个目的地的系统:“这个资源我用完了,你可以把它交给别人使用了”。至于尚在缓冲区中的数据,如果你不调用 flush() 方法,那这些数据将不会自动发送到目的地,当然可能就此丢失了。
    回答2:你说的“内存缓冲区”指 BufferedInputStream 吗?
      

  5.   

    1.会,不然怎么用flush()
    2.内存提供的缓存,是为了提高内存到CPU的速度。我们为什么还要自己创造另一个缓冲区呢,是提高硬盘到内存的速度
      

  6.   

    回答2:你说的“内存缓冲区”指 BufferedInputStream 吗?我说的缓冲区,是物理上内存就提供的一块缓冲区,虽然说,我想不会有人不去调用BufferedInputStream,但是为什么呢,它的思想主旨是什么呢?物理上已经给我们提供了一块缓冲区进行缓冲流,虽然不知道这块缓冲区是否是动态根据输入流大小来分配的,但是作为程序设计上设置Buffered缓冲区大小是很重要的。如果我设的这块Buffered缓冲区比内存提供的缓冲区小,那一般的理解岂不是反而降低了运行效率的码?
      

  7.   


    你说的那个缓冲区确实可能存在,但归操作系统自动管理,我们通过 Java 无权控制,所以不用过多考虑,管理好 Java 自己的缓冲区就行了。像这样的缓冲区太多了,例如文件中数据从磁盘到 CPU 上处理要经历:硬盘磁碟 -> 硬盘缓存(硬盘控制电路上的内存颗粒)-> 内存(俗称内存条)-> CPU L2(CPU 2级缓存)-> CPU L1(CPU 1级缓存)-> CPU 寄存器 -> ... 深究下去不学硬件没个完。
      

  8.   

    input流没有保存的概念吧
    output应该会保存