Java学习回忆录-基础理论-拷贝文件的四种方式
以拷贝一首歌曲来测试。
方案一: 使用普通流,没缓冲(淘汰)
4分钟.
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
int data;
while ((data = fis.read()) != -1) {
fos.write(data);
}
fis.close();
fos.close();
方案二: 使用普通流,自建缓冲. (可以)
294毫秒. 0.3 秒
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] buff = new byte[1024];
int len;
while ((len = fis.read(buff)) != -1) {
fos.write(buff, 0, len);
}
fis.close();
fos.close();
方案三: 使用了java 提供的字节缓冲流.(淘汰)
注意: 只是基本的read 和write . 一个字节读,一个字节写...
1950毫秒
怎么自带缓冲比普通流,自建数组作为缓冲的还要慢? 对比是不公平的.
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
BufferedInputStream buffis = new BufferedInputStream(fis);
BufferedOutputStream buffos = new BufferedOutputStream(fos);
int data;
while ((data = buffis.read()) != -1) {
buffos.write(data);
}
buffis.close();
buffos.close();
方案四: 使用了java 提供的字节缓冲流. (建议) ->最快
注意: 升级了读取和写出的方式. 批量读取和写出.
定义字节输出. 批量读取和写出.
read(byte[] b);
write(byte[] b,int start ,int len);
82毫秒
private static void copyFileByBuffer2(File srcFile, File destFile) throws IOException {
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
BufferedInputStream buffis = new BufferedInputStream(fis);
BufferedOutputStream buffos = new BufferedOutputStream(fos);
byte[] buff = new byte[1024];
int len;
while ((len = buffis.read(buff)) != -1) {
buffos.write(buff, 0, len);
}
buffis.close();
buffos.close();