package io.io6;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
*@description:复制媒体文件,以mp3为例
*@author:wang_bjian
*@date:2015-7-19下午5:17:29
*/
public class CopyFileTest {
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) {
// copy_1();
// copy_2();
// copy_3();
copy_4();
}
/**
* 第四种方式:-----最快
* int read(byte[] b, int off, int len)
从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。
* 执行时间:1437301051607-1437301051604=3
*/
private static void copy_4() {
FileInputStream input=null;
FileOutputStream output=null;
BufferedInputStream bufis=null;
BufferedOutputStream bufos=null;
try {
input=new FileInputStream("F:\\music_baojian\\music\\白若溪-追梦人.mp3");
bufis=new BufferedInputStream(input);
output =new FileOutputStream("白若溪_追梦人.mp3");
bufos =new BufferedOutputStream(output);
byte[] bytes=new byte[BUFFER_SIZE];
int len=0;
System.out.println(System.currentTimeMillis());
while((len=bufis.read(bytes))!=-1){
bufos.write(bytes,0,len);
}
System.out.println(System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(bufis!=null){
bufis.close();
}
if(bufos!=null){
bufos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* *使用缓冲区复制文件
* int read()从此输入流中读取一个数据字节。
* 执行时间:1437300321264-1437300321204=60
*/
private static void copy_3() {
FileInputStream input=null;
FileOutputStream output=null;
BufferedInputStream bufis=null;
BufferedOutputStream bufos=null;
try {
input=new FileInputStream("F:\\music_baojian\\music\\白若溪-追梦人.mp3");
bufis=new BufferedInputStream(input);
output =new FileOutputStream("白若溪_追梦人.mp3");
bufos =new BufferedOutputStream(output);
int ch=0;
System.out.println(System.currentTimeMillis());
while((ch=bufis.read())!=-1){
bufos.write(ch);
}
System.out.println(System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(bufis!=null){
bufis.close();
}
if(bufos!=null){
bufos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 第二种实现方式:
* int read() 从此输入流中读取一个数据字节。
* 千万不能用,效率非常低
* 执行时间:1437300470937-1437300464748=6189
*/
private static void copy_2() {
FileInputStream input=null;
FileOutputStream output=null;
try {
input=new FileInputStream("F:\\music_baojian\\music\\白若溪-追梦人.mp3");
output =new FileOutputStream("白若溪_追梦人.mp3");
int ch=0;
System.out.println(System.currentTimeMillis());
while((ch=input.read())!=-1){
output.write(ch);
}
System.out.println(System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(input!=null){
input.close();
}
if(output!=null){
output.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 第一种实现方式:
* read(byte[] b, int off, int len):
* 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
* 执行时间:1437300734527-1437300734516=11
*/
private static void copy_1() {
FileInputStream input=null;
FileOutputStream output=null;
try {
input=new FileInputStream("F:\\music_baojian\\music\\白若溪-追梦人.mp3");
output =new FileOutputStream("白若溪_追梦人.mp3");
byte[] bytes=new byte[BUFFER_SIZE];
int len=0;
System.out.println(System.currentTimeMillis());
while((len=input.read(bytes))!=-1){
output.write(bytes, 0, len);
}
System.out.println(System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(input!=null){
input.close();
}
if(output!=null){
output.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用字节流实现媒体文件的复制
最新推荐文章于 2021-07-02 15:41:54 发布