转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827481.html
用IO进行文件复制,实质就是用FileInputStream链接要复制的文件,按一定规模的字节数一段段地把文件复制读取出来,同时通过FileOutputStream把字节数组进行输出,直到待复制文件被“搬运”完毕。
画图理解:
代码实现:
import java.io.*; import java.util.*; public class IOliu{ public static void main(String[] args) { FileInputStream fis=null; FileOutputStream fos=null; try { File f1=new File("android.exe"); File f2=new File("android2.exe"); fis=new FileInputStream(f1); fos=new FileOutputStream(f2); byte[] bs=new byte[50000]; Date d=new Date(); int i; System.out.println("不带缓冲的 50000B 开始:"+d.toString()); while((i=fis.read(bs))!=-1) { fos.write(bs,0,i); } Date d2=new Date(); System.out.println("不带缓冲的 50000B 结束:"+d2.toString()); }catch(IOException ex) { System.out.println(ex); }finally { try{ fis.close(); fos.close(); }catch(IOException ex) { System.out.println(ex); } } } }
有趣的实验:
上面用来充当搬运工的byte数组是50000B大小,读者可以尝试更改这架“搬运车”的运量,由小到大多试几个数值,你会发现复制的效率会随着字节数组的大小而改变,并且接近某一个数值时达到较大效率,之后更大数值反而效率下降。