第一个版本:
package quickstart;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by patkritLee on 2017/3/21.
*/
public class CopyMp3 {
public static void main(String[] agrs) throws IOException{
long start = System.currentTimeMillis();
copy1();
long end = System.currentTimeMillis();
System.out.print((end-start)+"ms");
}
public static void copy1() throws IOException{
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("E:\\1.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("E:\\1copy.mp3"));
int by = 0;
while((by = bufis.read())!=-1){
bufos.write(by);
}
bufis.close();
bufos.close();
}
}
每次都直接从硬盘上取, 时间为:454ms
第二个版本,改进版本,缓存至一个数组中,时间为:336ms:
package quickstart;
import java.io.*;
/**
* Created by patkritLee on 2017/3/21.
*/
public class CopyMp3 {
public static void main(String[] agrs) throws IOException{
long start = System.currentTimeMillis();
copy2();
long end = System.currentTimeMillis();
System.out.print((end-start)+"ms");
}
public static void copy2() throws IOException{
MyBufferedInputStream bufis = new MyBufferedInputStream(new FileInputStream("E:\\1.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("E:\\1copy.mp3"));
int by = 0;
while((by = bufis.myRead())!=-1){
bufos.write(by);
}
bufis.myClose();
bufos.close();
}
}
class MyBufferedInputStream{
private InputStream in;
private byte[] buf = new byte[1024];
private int pos = 0,cnt = 0;
MyBufferedInputStream(InputStream in){
this.in = in;
}
//一次读取一个自己,从缓冲区(字节数组)获取
public int myRead() throws IOException{
//通过in对象读取硬盘上数据,并存储buf中
if(cnt==0){
cnt = in.read(buf);
if(cnt<0){
return -1;
}
pos = 0;
byte b = buf[pos];
cnt--;
pos++;
return b&255;
}
else if(cnt>0) {
byte b = buf[pos];
cnt--;
pos++;
return b & 255;
}
return -1;
}
public void myClose() throws IOException{
in.close();
}
}