本帖最后由 月黑风高 于 2013-8-28 18:21 编辑
/* * 自定义读取缓冲区,其实就是模拟一个BufferedReader * 分析: * 缓冲区中无非就是封装了一个数组,并对外提供了更多的方法对数组进行访问。 * 其实这些方法操作的就是数组的角标。 * * 原理: * 从源中获取一批数据装进缓冲区中,在从缓冲区中不断的取出一个一个数据。 * 取完后,再继续从源中取一批数据,当源中的数据取光时,用-1作为结束标记。 */
代码展示: public class MyBufferedReader { private FileReader r; //针对FileReader的高效流缓冲区 MyBufferedReader(FileReader r){ this.r=r; } //定义一个数组作为缓冲区 private char[] chs=new char[1024]; //定义一个指针,便于操作数组中的元素,当操作到最后一个元素后,指针应该归0 private int pos=0; //定义一个计数器用于记录缓冲区中的数据个数,当该数据减到0,就从源中继续获取数据到缓冲区中。 private int count=0; public int myRead() throws IOException{ if(count==0){ //计数器为0,从源中获取数据到缓冲区中 count=r.read(chs); //每次从源中取一批数据,指针归0 pos=0; } //如果取出,返回值为-1,说明取完了。 if(count<0) return -1; //每次取一个字符,指针后移,这批总的数据量减少 char ch=chs[pos++]; count--; return ch; } } |