package bytetest;
import java.io.IOException;
import java.io.InputStream;
public class MyBufferedInputStream {
private InputStream in;
private byte[] buf = new byte[1024];
private int pos = 0;
private int count = 0;
public MyBufferedInputStream(InputStream in) {
this.in = in;
}
// 一次读一个字节,从缓冲区(字节数组)获取
public int myRead() throws IOException {
// 通过in对象读取硬盘上数据,并存储buf中。
if (count == 0) {
count = in.read(buf);
pos = 0;
byte b = buf[pos];
count--;
pos++;
return b & 255; //向上提升到int,防止读到 11111111(-1)而意外终止,
} else if (count > 0) {
byte b = buf[pos];
count--;
pos++;
return b & 255;
}
return -1;
}
public void myClose() throws IOException {
in.close();
}
}
测试
package bytetest;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp3 {
public static void main(String[] args) throws IOException {
copyMp3_2();
}
public static void copyMp3_2() throws IOException {
MyBufferedInputStream bufis = new MyBufferedInputStream(
new FileInputStream("1.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(
new FileOutputStream("3.mp3"));
int by=0;
while((by=bufis.myRead())!=-1){ //将byte强转成int
bufos.write(by); //将读到的 int 类型的数据强转回 byte 再写入
}
bufos.close();
bufis.myClose();
}
}