java设计模式---装饰模式


import java.io.FileReader;
import java.io.IOException;

public class MyBufferedReader {
	private FileReader fr;// 先要有个包装对象

	private char[] buf = new char[1024];// new一个缓存
	private int count = 0;// 记录当前缓存中字符的个数(指没有被外面读取的)
	private int pos = 0;// 当前读取字符的位置
	public MyBufferedReader(FileReader fr) {//构造传参
		this.fr = fr;
	}
	
	/*从缓存中读取一个字符返回给调用方。
	 * 如果缓存中不存在字符数据,就用被包装对象fr
	 * 到磁盘中去读取一堆数据放到缓存中。
	 */
	public int read() throws IOException{
		if(count==0){//缓存是空的,必须到磁盘中加载
			count =fr.read(buf);
	        pos=0;
		}
		if(count<0){
			//已经没有数据了,连磁盘中也读完,返回-1 (API也是这么做)
			return -1;
		}
		
		char c=buf[pos];
		count--;
		pos++;
		
		return c;
	}
	
    public String readLine() throws IOException{
    	StringBuilder sb=new StringBuilder();
    	int c=0;
    	while((c=read())!=-1){
    		char ch=(char) c;
    		if(ch=='\n'){
    			return sb.toString();
    		}
    		sb.append(ch);
    		}
    	
    	if(sb.length()!=0){//最后一行没有换行符,也要返回
    		return sb.toString();
    	}
    	return null;
    }
}

import java.io.FileReader;
import java.io.IOException;

public class MyBufferedReader {
	private FileReader fr;// 先要有个包装对象

	private char[] buf = new char[1024];// new一个缓存
	private int count = 0;// 记录当前缓存中字符的个数(指没有被外面读取的)
	private int pos = 0;// 当前读取字符的位置
	public MyBufferedReader(FileReader fr) {//构造传参
		this.fr = fr;
	}
	
	/*从缓存中读取一个字符返回给调用方。
	 * 如果缓存中不存在字符数据,就用被包装对象fr
	 * 到磁盘中去读取一堆数据放到缓存中。
	 */
	public int read() throws IOException{
		if(count==0){//缓存是空的,必须到磁盘中加载
			count =fr.read(buf);
	        pos=0;
		}
		if(count<0){
			//已经没有数据了,连磁盘中也读完,返回-1 (API也是这么做)
			return -1;
		}
		
		char c=buf[pos];
		count--;
		pos++;
		
		return c;
	}
	
    public String readLine() throws IOException{
    	StringBuilder sb=new StringBuilder();
    	int c=0;
    	while((c=read())!=-1){
    		char ch=(char) c;
    		if(ch=='\n'){
    			return sb.toString();
    		}
    		sb.append(ch);
    		}
    	
    	if(sb.length()!=0){//最后一行没有换行符,也要返回
    		return sb.toString();
    	}
    	return null;
    }
}

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.junit.Test;

public class TestMyBufferedReader {
	@Test//API中的BufferedReader---read()
	public void testread() throws IOException{
		FileReader fr=new FileReader("a.txt");
		BufferedReader bfr=new BufferedReader(fr);
		/*
		char c = (char) bfr.read();
		System.out.println(c);
		*/
		int c;
		while((c=bfr.read())!=-1){
			char ch=(char) c;
			System.out.print(ch);
		}
		System.out.println();
	}
	
	
	@Test//我们开发的MyBufferedReader---read()
	public void testMyRead() throws IOException{
		FileReader fr=new FileReader("a.txt");
	    MyBufferedReader mbr=new MyBufferedReader(fr);
	    /*
		char c = (char) bfr.read();
		System.out.println(c);
		*/
	    int c;
	    while((c=mbr.read())!=-1){
	    	char ch=(char) c;
	    	System.out.print(ch);
	    }
	    System.out.println();
	}
	
	@Test//API中的BufferedReader---readLine()
	public void testReadLine() throws IOException{
		FileReader fr=new FileReader("a.txt");
		MyBufferedReader br=new MyBufferedReader(fr);
		
		String str=null;
		while((str=br.readLine())!=null){
			System.out.print(str);
		}
		System.out.println();
	}
	
	@Test//MyBufferedReader---readLine()
	public void testMyReadLine() throws IOException{
		FileReader fr=new FileReader("a.txt");
		MyBufferedReader br=new MyBufferedReader(fr);
		
		String str=null;
		while((str=br.readLine())!=null){
			System.out.print(str);
		}
		System.out.println();
	}
}
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
//v2版本: 只是包装InputStreamReader类
public class MyBufferedReader {
	private InputStreamReader fr;// 先要有个包装对象

	private char[] buf = new char[1024];// new一个缓存
	private int count = 0;// 记录当前缓存中字符的个数(指没有被外面读取的)
	private int pos = 0;// 当前读取字符的位置
	public MyBufferedReader(InputStreamReader fr) {//构造传参
		this.fr = fr;
	}
	
	/*从缓存中读取一个字符返回给调用方。
	 * 如果缓存中不存在字符数据,就用被包装对象fr
	 * 到磁盘中去读取一堆数据放到缓存中。
	 */
	public int read() throws IOException{
		if(count==0){//缓存是空的,必须到磁盘中加载
			count=fr.read(buf);
	        pos=0;
		}
		if(count<0){
			//已经没有数据了,连磁盘中也读完,返回-1 (API也是这么做)
			return -1;
		}
		
		char c=buf[pos];
		count--;
		pos++;
		
		return c;
	}
	
    public String readLine() throws IOException{
    	StringBuilder sb=new StringBuilder();
    	int c=0;
    	while((c=read())!=-1){
    		char ch=(char) c;
    		if(ch=='\n'){
    			return sb.toString();
    		}
    		sb.append(ch);
    		}
    	
    	if(sb.length()!=0){//最后一行没有换行符,也要返回
    		return sb.toString();
    	}
    	return null;
    }
}


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.junit.Test;

public class TestMyBufferedReader {
	@Test//API中的BufferedReader---read()
	public void testread() throws IOException{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));
		BufferedReader br = new BufferedReader(isr);
		/*
		char c = (char) isr.read();
		System.out.println(c);
		*/
		int c;
		while((c=isr.read())!=-1){
			char ch=(char) c;
			System.out.print(ch);
		}
		System.out.println();
	}
	
	
	@Test//我们开发的MyBufferedReader---read()
	public void testMyRead() throws IOException{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));
		MyBufferedReader br = new MyBufferedReader(isr);
	    /*
		char c = (char) bfr.read();
		System.out.println(c);
		*/
	    int c;
	    while((c=isr.read())!=-1){
	    	char ch=(char) c;
	    	System.out.print(ch);
	    }
	    System.out.println();
	}
	
	@Test//API中的BufferedReader---readLine()
	public void testReadLine() throws IOException{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));
		BufferedReader br = new BufferedReader(isr);
		
		String str=null;
		while((str=br.readLine())!=null){
			System.out.print(str);
		}
		System.out.println();
	}
	
	@Test//MyBufferedReader---readLine()
	public void testMyReadLine() throws IOException{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));
		MyBufferedReader br = new MyBufferedReader(isr);
		
		String str=null;
		while((str=br.readLine())!=null){
			System.out.print(str);
		}
		System.out.println();
	}
}
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
//v3版本: 最终版,能够兼容所有Reader
public class MyBufferedReader extends Reader{
	//★
	private Reader r;//要拥有一个被包装对象

	private char[] buf = new char[1024];// new一个缓存
	private int count = 0;// 记录当前缓存中字符的个数(指没有被外面读取的)
	private int pos = 0;// 当前读取字符的位置
	public MyBufferedReader(Reader r) {//构造传参
		this.r = r;
	}
	
	/*从缓存中读取一个字符返回给调用方。
	 * 如果缓存中不存在字符数据,就用被包装对象r
	 * 到磁盘中去读取一堆数据放到缓存中。
	 */
	public int read() throws IOException{
		if(count==0){//缓存是空的,必须到磁盘中加载
			count=r.read(buf);
	        pos=0;
		}
		if(count<0){
			//已经没有数据了,连磁盘中也读完,返回-1 (API也是这么做)
			return -1;
		}
		
		char c=buf[pos];
		count--;
		pos++;
		
		return c;
	}
	
    public String readLine() throws IOException{
    	StringBuilder sb=new StringBuilder();
    	int c=0;
    	while((c=read())!=-1){
    		char ch=(char) c;
    		if(ch=='\n'){
    			return sb.toString();
    		}
    		sb.append(ch);
    		}
    	
    	if(sb.length()!=0){//最后一行没有换行符,也要返回
    		return sb.toString();
    	}
    	return null;
    }

	@Override
	public int read(char[] cbuf, int off, int len) throws IOException {
		return r.read(cbuf, off, len);
	}
	@Override
	public void close() throws IOException {
		r.close();
	}
}

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.junit.Test;
//这个类和v1,v2版本都完全相同,没有变化
public class TestMyBufferedReader {
	@Test//我们开发的MyBufferedReader---read()
	public void testMyRead() throws IOException{
		FileReader fr = new FileReader("a.txt");
		MyBufferedReader br = new MyBufferedReader(fr);
	    /*
		char c = (char) bfr.read();
		System.out.println(c);
		*/
	    int c;
	    while((c=br.read())!=-1){
	    	char ch=(char) c;
	    	System.out.print(ch);
	    }
	    System.out.println();
	}
	
	
	@Test//MyBufferedReader---readLine()
	public void testMyReadLine() throws IOException{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));
		MyBufferedReader br = new MyBufferedReader(isr);
		
		String str=null;
		while((str=br.readLine())!=null){
			System.out.print(str);
		}
		System.out.println();
	}
}




猜你喜欢

转载自blog.csdn.net/lx678111/article/details/79957602