本帖最后由 a250781230 于 2014-07-26 23:38:25 编辑

解决方案 »

  1.   

    1.BufferedStream内部实现就是相当于每次读取8K左右的数据,所以你用FileStream,再用一个8K的buf缓冲效果和BufferedStream差不多。
    2.你BufferedStream每次只读一个字节,然而FileStream每次读8K,这样没有可比性,就算是同样用BufferedStream,一个每次读一个字节,一个每次读8K字节,大多数情况下肯定是8K快,你可以试试用FileStream,每次只读一个字节,那就肯定比用BufferedStream每次读一个字节要慢。
    3.复制文件不是一定要使用BufferedStream的情况,甚至可以说不应该使用BufferedStream,如果你确切地知道每次要读多少字节,并且这个字节数还是4K的倍数,那么不需要包装一层BufferedStream,而应该直接用FileStream,使用BufferedStream通常是你不知道要读多少字节,或者你知道读多少,但是这个字节数比一个文件Block要小,甚至都不是2的幂,比如你要一个字节一个字节地读文件,这时使用BufferedStream包装一下再去读能提高效率,并且通常BufferedStream只包装文件读取这个区块式文件系统,因为读取一个文件,就算你只需要读一个字节,操作系统和硬件也不可能只读一个字节,因为硬盘文件系统是分块的,通常一个块(也就是上面说的Block)大小是4K,所以如果你要读一个字节,那操作系统要载入4K数据到内存,然后再给你一个字节,然后你读下一个字节,如果操作系统和你的文件流都没有缓冲的话,那又需要重新载入4K数据到内存,然后给你一个字节,所以效率很低,这个时候使用BufferedStream都十分必要了,它能避免反复加载同一个文件块。