IO 缓冲区有关问题
IO 缓冲区问题
请问 我自己定义一个字节型的数组缓冲区后 这个数组的长度 我第一次定义是1024*100 拷贝文件速度
平均大概30毫秒 第二次定义是657832 拷贝文件平均时间大概是300毫秒 同样都是 6位数字 为什么第一
次比第二次快那么多 请帮我分析下这个过程 和 内存知识!
代码如下
------解决方案--------------------
这个比较底层了
推荐你看<深入理解计算机系统>一书
应该是缓存的问题
缓存的一块一般是2^n个字节,一次读文件会读2^n字节进来
一般设置数组长度为2^n会提高缓存命中
n和缓存相关
所以有时候在优化的时候会补齐到2^n长度的数组,即使用不到
请问 我自己定义一个字节型的数组缓冲区后 这个数组的长度 我第一次定义是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长度的数组,即使用不到