问答详情
源自:4-5 字节缓冲流

为什么利用数组批量copy这么快啊?

太不可思议了

提问者:Lemuria 2014-11-27 13:41

个回答

  • 发呆的阿呆
    2015-10-26 20:19:48
    已采纳

    这里的数组应该相当于缓存   

  • IT骚年
    2015-12-15 17:41:29

    我仔细看了下buffered那个copy 的方法:

    BufferedInputStream bis=new BufferedInputStream(

    new FileInputStream(destFile));

    BufferedOutputStream bos=new BufferedOutputStream(

    new FileOutputStream(destFile));

    int c;

    while((c=bis.read())!=-1)//从这里看应该是一个一个字节的读取,但是他读出后先放到一个默认大小的缓冲区,因为是BufferedOutputStream。等到缓冲区满了,刷新缓冲区。

    //而批量的那个copy 方法是一次就读取一块字节数组,所以是整块整块的读取数据的。所以批量读取的是最快的。

    //BufferedOutputStream 可以改进成也是按照一块块的读取  在循环前面顶一个字节数组,代码我就不写了 这样应该是最快的

    //总结下:BufferedOutputStream通过增加缓冲减少内存访问次数,以此来减少运行时间。而批量操作是读取单位变大了,每一次按照块来读,所以极大程度的降低了程序的运行时间。

    这是我的想法。可以参考下。你有什么想法,我们可以交流下。


  • augustvip
    2015-11-12 22:54:31

    这什么最佳垃圾答案 你有没有看过 前面的视频

  • augustvip
    2014-12-20 18:40:50

    这个问题我也 再思考  怎么忽视缓存 最快啊