您的位置:首页 > 编程语言 > Java开发

使用字节流实现媒体文件的复制

2015-07-19 18:29 633 查看
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();
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息