1.首先我们先选取一个视频文件:我这边是MP4格式的,其他格式都可以!
2.我们通过Java中 System.currentTimeMillis()获取自UNIX时间戳到现在的总毫秒数,而后计算当前时间,通过各种方法运行前后的时间差计算耗时多少!
3.具体方法如下:
package com.IO流;
import java.io.*;
/*
* @Auther: JingZ
* @Description: com.IO流
* @version: 1.0
*/
public class CopyMp4Dame {
public static void main(String[] args)throws IOException {
//记录开始时间
long starTime = System.currentTimeMillis();
//调用方法:
// method1 ();//1.基本字节流一次读写一字节,共耗时:30795毫秒
// method2 ();//2.基本字节流一次读写一字节数组,共耗时:66毫秒
// method3 ();//3.字节缓冲流一次读写一字节,共耗时:217毫秒
method4 ();//4.字节缓冲流一次读写一字节数组,共耗时:8毫秒
//结束开始时间
long endTime = System.currentTimeMillis();
System.out.println("共耗时:" + (endTime - starTime) + "毫秒");
}
//1.基本字节流一次读写一字节
public static void method1 () throws IOException {
FileInputStream fis =new FileInputStream("C:\\Users\\Administrator\\Desktop\\java.mp4");
FileOutputStream fos = new FileOutputStream("D:\\Java文件\\IDEA-WorkPace\\Test1\\src\\com\\IO流\\java.mp4");
int by;
while ((by=fis.read())!=-1){
fos.write(by);
}
fis.close();
fos.close();
}
//2.基本字节流一次读写一字节数组
public static void method2 () throws IOException {
FileInputStream fis =new FileInputStream("C:\\Users\\Administrator\\Desktop\\java.mp4");
FileOutputStream fos = new FileOutputStream("D:\\Java文件\\IDEA-WorkPace\\Test1\\src\\com\\IO流\\java.mp4");
byte[] bys=new byte[1024];
int len;
while ((len=fis.read(bys))!=-1){
fos.write(bys,0,len);
}
fis.close();
fos.close();
}
//3.字节缓冲流一次读写一字节
public static void method3 () throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\java.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\Java文件\\IDEA-WorkPace\\Test1\\src\\com\\IO流\\java.mp4"));
int by;
while ((by=bis.read())!=-1){
bos.write(by);
}
bis.close();
bos.close();
}
//4.字节缓冲流一次读写一字节数组
public static void method4 () throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\java.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\Java文件\\IDEA-WorkPace\\Test1\\src\\com\\IO流\\java.mp4"));
byte[] bys=new byte[1024];
int len;
while ((len=bis.read(byt))!=-1){
bos.write(bys,0,len);
}
bis.close();
bos.close();
}
}
多次计算取平均值,得到的结果为:
总结:
1:读写一字节数组比读写一字节快
2:字节缓冲流比基本字节流快
综上:在上诉四种方式中,字节缓冲流一次读写一字节数组方式最快