IO讀寫(復制)視頻練習
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
- IO練習,一個復制視頻的類
- 練習文件為大小1,443,621 字節的wmv視頻文件
- @author Administrator
-
*/
public class CopyVideo {
/**- 方法一
- 基礎復制方法
- 使用InputStream,OutputStream
- 測試結果:基礎復制花費時間:10367毫秒;
- @param fromFileName
- @param toFileName
*/
public static void baseCopyMethod(String fromFileName,String toFileName) {
long startTime = System.currentTimeMillis();
InputStream in = null;
OutputStream out = null;
in = new FileInputStream(fromFileName);
out = new FileOutputStream(toFileName);
int tempRead ;
while((tempRead = in.read())>-1) {
out.write(tempRead);
out.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(in!=null)in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
long spendTime = endTime - startTime;
System.out.println("方法一,基礎復制花費時間:"+ spendTime + "毫秒;");
}
/**
- 方法二
- 使用InputStream,OutputStream,並增加字節數組作為緩沖區,提升效率
- 方法二,增加緩存後復制用時:121毫秒
- @param fromFileName
-
@param toFileName
*/
public static void baseCopyMethod2(String fromFileName,String toFileName) {
long startTime = System.currentTimeMillis();
InputStream in = null;
OutputStream out = null;try {
in = new FileInputStream(fromFileName);
out = new FileOutputStream(toFileName);
byte[] buf = new byte[102];//緩沖區數組,減少硬盤的讀取操作
int tempRead ;
while((tempRead=in.read(buf))>-1) {
out.write(buf);
out.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(in!=null)in.close();
if(out!=null)out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
long spendTime = endTime - startTime;
System.out.println("方法二,增加緩存後復制用時:"+ spendTime + "毫秒");
}
/**
- 方法三
- 方法三,使用BufferedInputStream和BufferedOutputStream
- 方法三,使用BufferedInputStream和BufferedOutputStream後復制用時:8268毫秒
- @param fromFileName
- @param toFileName
*/
public static void bufferedCopyMethod(String fromFileName,String toFileName ) {
long startTime = System.currentTimeMillis();
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(fromFileName));
out = new BufferedOutputStream(new FileOutputStream(toFileName));
int readContent;
while((readContent = in.read())!=-1) {
out.write(readContent);
out.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(in!=null)in.close();
if(out!=null)out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
long spendTime = endTime - startTime;
System.out.println("方法三,使用BufferedInputStream和BufferedOutputStream後復制用時:"+ spendTime + "毫秒");
}
/**
- 方法四
- 方法四,在BufferedInputStream和BufferedOutputStream基礎上再次添加緩存數組
- 方法四,BufferedInputStream和BufferedOutputStream基礎上添加緩存數組後復制用時:16毫秒
- @param fromFileName
- @param toFileName
*/
public static void bufferedCopyMethod2(String fromFileName,String toFileName ) {
long startTime = System.currentTimeMillis();
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(fromFileName));
out = new BufferedOutputStream(new FileOutputStream(toFileName));
int readContent ;
byte[] buf = new byte[1024];
while((readContent=in.read(buf))!=-1) {
out.write(buf);
out.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(in!=null)in.close();
if(out!=null)out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
long spendTime = endTime - startTime;
System.out.println("方法四,BufferedInputStream和BufferedOutputStream基礎上添加緩存數組後復制用時:"+ spendTime + "毫秒");
}
public static void main(String[] args) {
String fromFileName = "C:\Users\Administrator\Desktop\test.wmv";
String toFileName = "C:\Users\Administrator\Desktop\test1.wmv";
//baseCopyMethod(fromFileName,toFileName);
//baseCopyMethod2(fromFileName,toFileName);
//bufferedCopyMethod(fromFileName,toFileName);
bufferedCopyMethod(fromFileName,toFileName);
}
}
IO讀寫(復制)視頻練習