nio - 直接内存复制文件
import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.Date; public class Test { public static void main(String[] args){ Test t = new Test(); t.directBuffer(); t.io(); } public void directBuffer(){ long time1 = new Date().getTime(); File f = new File("F:/test"); File film1 = new File("F:/test/01.mp4"); File film2 = new File("F:/test/03.mp4"); try { FileChannel fis = new FileInputStream(film1).getChannel(); FileChannel fos = new FileOutputStream(film2).getChannel(); ByteBuffer bb = ByteBuffer.allocateDirect(1024 * 1024); while(true){ int read = fis.read(bb); if(read != -1){ bb.flip(); fos.write(bb); bb.clear(); } else{ break; } } } catch (Exception e) { e.printStackTrace(); } long time2 = new Date().getTime(); long time = time2 - time1; System.out.println("直接内存方法复制文件使用了" + time + "毫秒"); } public void io(){ long time1 = new Date().getTime(); File f = new File("F:/test"); File film1 = new File("F:/test/01.mp4"); File film2 = new File("F:/test/02.mp4"); try { FileInputStream fis = new FileInputStream(film1); FileOutputStream fos = new FileOutputStream(film2); byte[] b = new byte[1024 * 1024]; while(true){ int read = fis.read(b); if(read != -1){ fos.write(b); } else{ break; } } } catch (Exception e) { e.printStackTrace(); } long time2 = new Date().getTime(); long time = time2 - time1; System.out.println("普通nio方法复制文件使用了" + time + "毫秒"); } }