package test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
class MyBufferedInputStream{
private InputStream in;
private byte buf [] = new byte[1000];
private int pos = 0;
private int count = 0;
MyBufferedInputStream(InputStream in){
this.in = in;
}
public int myRead()throws IOException{
if(count == 0){
count = in.read(buf);
if(count < 0)
return -1;
pos = 0;
byte b = buf[pos];
count--;
pos++;
return b & 0xff;
}else if(count > 0){
byte b = buf[pos];
count--;
pos++;
return b & 0xff;
/*由於b是byte類型,返回時Java會自動提升至int,所以爲了確保不返回-1,將b與0xff與運算。
即讀取到b爲-1時,2進製表示爲11111111
byte——》int 11111111——》11111111 11111111 11111111 11111111
與0xff做與運算 ——》00000000 00000000 00000000 11111111
*/
}else
return -1;
}
public void myClose()throws IOException{
in.close();
}
}
public class MyBufferedInputStreamDemo{
public static void main(String args[])throws IOException{
long start = System.currentTimeMillis();
copy();
long end = System.currentTimeMillis();
System.out.println((end - start) + "毫秒");
}
public static void copy()throws IOException{
MyBufferedInputStream bufis = new MyBufferedInputStream(new FileInputStream("D:\\My Documents\\My Pictures\\未命名.jpg"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("D:\\My Documents\\My Pictures\\test.jpg"));
int by = 0;
while((by = bufis.myRead()) != -1){
bufos.write(by);
//byte強制轉換int 去掉之前做與運算產生的多與的3個8位。
}
bufos.close();
bufis.myClose();
}
}
自己實現BufferedInputStream
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.