首先:你的“BufferdStream” 写错了,应该是 BufferedStream  ;其次:对于性能的体现,举个实际的例子。当你要向网络中写一段字符时,你是写一字符就发送呢,还是先一起写到缓存里,再一起发送好。

解决方案 »

  1.   

    JAVA所说的安全性,我到现今还没有体会出来。缓冲我认为小P讲的对!
      

  2.   

    你读数据的过程是硬盘——内存——CPU的缓存——CPU执行。
    而你从缓存读的好处,就是你的数据先就排好了对
    就像你去超市买东西,要是一个排队,一个人买那么你结帐的时间就会少很多
    因为你在买东西的同时“你”就在排队了。
      

  3.   

    不好意思,有些不太明白各位说的意思。我知道,数据从内存读比从硬盘读来的快。可是,数据总要从硬盘移过来吧?举上面的例子来说,当BufferedStream的缓冲区从流中读取或写入数据时,也是一个字节一个字节的移动吧?这一段所用时间,与不用缓冲区直接读写所用的时间应相同吧?而这段时间竟不算在程序的时间内?应该算吧?书上说,减少了与硬件相关的I/O
      

  4.   

    不好意思为发完,未发完,从发:可是,数据总要从硬盘移过来吧?举上面的例子来说,当BufferedStream的缓冲区从流中读取或写入数据时,也是一个字节一个字节的移动吧?这一段所用时间,与不用缓冲区直接读写所用的时间应相同吧?而这段时间竟不算在程序的时间内?应该算吧?听各位的意思,这段时间不算在程序的时间内了?书上说,减少了与硬件相关的I/O操作,一个字节一个字节的移动,也没有减少啊?
      

  5.   

    buffer的好处在于每一次从外部设备一次读入一定数量的数据,比如256B,这时的操作是CPU请求了一个读外部设备的中断,然后外部设备会将请求的256B数据一次性读入内存,然后CPU释放请求,这样就节省了一个字节一个字节读反复请求中断的操作,这个操作消耗的资源还是很大的。当然读磁盘的速度是得不到提高的,那要靠磁盘的缓存来实现
      

  6.   

    tigeryu(吴越小虎)先生的说法有道理,但是,请看一下BufferdStream的实现原理:1,先说输出缓冲区,当调用BufferdOutputStream.write(byte t)时,调用buffer[i++]=t;当缓冲区的数据已满或刷新缓冲区时,BufferdOutputStream的flushBuffer()方法采用如下方法:
        for(i=0;i<buffer.length;i++)
        {    
             byte o=buffer[i];
             out.write(o);
        }
    此方法难道不要一个字节一个字节读反复请求中断的操作,读入内存?那我对于每个要写的字节byte直接调用out.write(byte);,和先用buffer[i]=byte,再在for()中调用out.write(byte);有何区别?2,再说输入缓冲区,当将流中的数据写到缓冲区时,是这麽调用的:
        while(byte n=inputStream.read()!=-1)
        {
            buffer[i++]=n;
        }
    当程序调用BufferdInputStream.read()时,将返回buffer[i]。那这与直接返回inputStream.read()又有何区别?谁能解释一下?
      

  7.   

    没考虑那么复杂,简单一点猜想:
    java是个平台,并不是在class程序中调用中断操作的
    out建立的连接有时效性,如果一段时间对out没有输出,则自动关闭物理连接
    所以如果一次性向out输出n个数据的效率理论上要比间隔很长时间n次输出out个数据来的有效率
    而java虚拟机更能从一次性n个重复的操作中分析出具体的操作方法,如掉用中断写块数据等等
    这些是虚拟机的事,如果想比较异同,写两段程序就知道结果了
    愚见,愚见,呵呵