自己實現BufferedInputStream

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();
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章