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

来源:互联网 发布:知乎怎么赚钱 编辑:程序博客网 时间:2024/05/18 01:15
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();}}}}

0 0