代码如下:
public class copy { public static void main(String[] args) throws IOException { long s = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("C:\\Users\\ZZY\\Desktop\\JavaNote\\02-Java 语言进阶\\原理图\\哈希表.png");
FileOutputStream fos = new FileOutputStream("C:\\Users\\ZZY\\Desktop\\哈希表.png");
byte[] bytes = new byte[1024];
int len = 0;
while((len = fis.read()) != -1){
fos.write(bytes,0,len);
}
fos.close();
fis.close();
long e = System.currentTimeMillis();
System.out.println("文件输出耗时" + (e-s) + "毫秒" );
}
}
字节数组长度设置为 1024 是用时 3295 长度为 10240000 时用时 2942 长度为 1024000000 时用时 3485
图片大小是 52mb
为什么数组长度变大了,读取时间反而是长→短→更长呢?
1
zhao1014 OP 格式乱了不好意思,将就看下
|
2
misaka19000 2020-05-08 23:36:20 +08:00
也许是超过了磁盘或者内存或者 CPU 的缓存或者超过了磁盘或者 CPU 的快大小
|
3
xupefei 2020-05-08 23:52:38 +08:00 via iPhone
一个簇是 4096 字节。
1024 的 buffer 在没有 read ahead 的时候是浪费磁盘 IO 。 楼主多试几个 4096 的倍数? |
4
xupefei 2020-05-08 23:56:18 +08:00 via iPhone 1
我仔细看了看代码,fis.read 每次读一个字节,你设置的 buffer 大小有意义吗
|
5
whitev2 2020-05-09 00:22:38 +08:00
Files.copy() 不香么?
|
9
zhao1014 OP @xupefei 我把代码改了,1024 时用时 8 毫秒,
102400000 用时 175 毫秒,你说的簇我还不太懂应该是我没学到的地方,我查查资料学习一下。谢谢回答! |
10
zhao1014 OP @xupefei 测试 4096 和 409600000 的时候也是大的字节数组读写的速度慢,但是 4096 比 1024 快很多,40960 比 4096 快一点,数组过大读写速度反而会慢了,不太理解为什么。
|
12
doudouwu 2020-05-09 11:07:29 +08:00
瞎了,没看到更正
|