IO 缓冲区问题

Edwin603 2009-07-22 12:16:11
请问 我自己定义一个字节型的数组缓冲区后 这个数组的长度 我第一次定义是1024*100 拷贝文件速度
平均大概30毫秒 第二次定义是657832 拷贝文件平均时间大概是300毫秒 同样都是 6位数字 为什么第一
次比第二次快那么多 请帮我分析下这个过程 和 内存知识!
代码如下
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]; //new byte [657832];
int num = 0;
while ((num=fi.read(by))!=-1) {
fo.write(by,0,num);
fo.flush();
}
fo.close();
fi.close();
}
}
...全文
132 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdjray 2009-07-22
  • 打赏
  • 举报
回复
这个比较底层了
推荐你看<深入理解计算机系统>一书

应该是缓存的问题
缓存的一块一般是2^n个字节,一次读文件会读2^n字节进来
一般设置数组长度为2^n会提高缓存命中
n和缓存相关
所以有时候在优化的时候会补齐到2^n长度的数组,即使用不到
Edwin603 2009-07-22
  • 打赏
  • 举报
回复
补充下 其实1024*X X如果大于等于2 在我的电脑上试验 拷贝完成 的速度基本都在30毫秒左右
1024的话 速度是190 毫秒左右 请告诉我这个原理 本人这里不太懂内存原理!
请说的详细些

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧