日期:2014-05-20  浏览次数:20793 次

IO 缓冲区问题
请问 我自己定义一个字节型的数组缓冲区后 这个数组的长度 我第一次定义是1024*100 拷贝文件速度
平均大概30毫秒 第二次定义是657832 拷贝文件平均时间大概是300毫秒 同样都是 6位数字 为什么第一
次比第二次快那么多 请帮我分析下这个过程 和 内存知识!
代码如下
Java code
class Copy1 {
    static void copy()throws Exception {
        FileInputStream fi = 
            new FileInputStream("fists.mp3");
        FileOutputStream fo = 
            new FileOutputStream("aa.mp3");
        byte [] by = new byte [1024*100];  [color=#FF0000]//new byte [657832];[/color]
        int num = 0;
        while ((num=fi.read(by))!=-1) {
            fo.write(by,0,num);
            fo.flush();
        }
        fo.close();
        fi.close();
    }
}


------解决方案--------------------
这个比较底层了
推荐你看<深入理解计算机系统>一书

应该是缓存的问题
缓存的一块一般是2^n个字节,一次读文件会读2^n字节进来
一般设置数组长度为2^n会提高缓存命中
n和缓存相关
所以有时候在优化的时候会补齐到2^n长度的数组,即使用不到