首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

IO 缓冲区有关问题

2011-12-26 
IO 缓冲区问题请问 我自己定义一个字节型的数组缓冲区后 这个数组的长度 我第一次定义是1024*100 拷贝文件

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长度的数组,即使用不到

热点排行