解决方案 »

  1.   

    BufferedInputStream 是缓冲输入流。它继承于FilterInputStream。
    BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供“缓冲功能”以及支持“()标记”和“reset()重置方法”。
    BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。copy_1中的buff类似BufferedInputStream 自带的缓冲区,copy_2中buff那一句已经注释掉了,BufferedInputStream 默认的缓冲字节是8192,无论copy_1中的buff,和BufferedInputStream自带的缓冲区都是为了提高效率,至于两个的效率谁高,这个要测试才知道
      

  2.   

    可是我测试了啊,copy_1中的while循环 fos.write(buff,0,len)只要执行几十此就OK了,而copy-2中的while循环是一个字节一个字节写入的,需要几万次`````这是为什么呢?既然有了BufferedInputStream,不是应该像copy_1中的那样执行吗?
      

  3.   

    copy_2 你应该看看被 BufferedInputStream 包起来的 FileInputStream 里的 read(byte b[], int off, int len) 被调用多少次
      

  4.   

    你这种大进大出,是没有区别的。而且是有点亏。
    BufferedInputStream是委托模式。一般是用read(byte b[], int off, int len),读一点,进行分析,再读一点。
      

  5.   

    要自己控制读取多少字节,否则可能会导致内存溢出read(byte b[], int off, int len),每次读取1024个字节,写出,然后再次读入
      

  6.   

    一个是:fos.write(buff,0,len);
    另一个是:bos.write(len);//文件有多字节就写多少次
    方法调用的不一样。
    1楼说的是对的
    无论copy_1中的buff,和BufferedInputStream自带的缓冲区都是为了提高效率
    我那么打印次数是不对的。
    具体的执行次序是:
    BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。
    而FileInputStream通过使用copy_1中的buff效果是基本一样的。
    Thanks,各位!