黑马程序员技术交流社区

标题: 模拟read()方法不懂,请教一下 [打印本页]

作者: 遗忘的青春年华    时间: 2014-3-16 22:58
标题: 模拟read()方法不懂,请教一下
import java.io.IOException;
import java.io.Reader;

public class MyBufferedReader {
        private Reader r;
        private char[] arr = new char[5];                       
        private int pos;                                                       
        private int len;                                                       
       
        public MyBufferedReader(Reader r) {
                this.r = r;
        }
       
        public int read() throws IOException {
                if(len == pos){                                                       
                        len = r.read(arr);                                       
                        pos = 0;                                                       
                }
                return len == -1 ? -1 : arr[pos++];                //我不明白为什么这里pos++他执行几次呢?每               次取得值又是多少呢?
        }
       
        public String readLine() throws IOException {
                StringBuilder sb = new StringBuilder();       
                int ch;                                                                       
                while((ch = r.read()) != -1) {                       
                        if(ch == '\r') {                                       
                                continue;                                               
                        }else if(ch == '\n') {                               
                                break;                                                       
                        }else {
                                sb.append((char)ch);                       
                        }
                }
                return ch == -1 && sb.length() == 0 ? null : sb.toString();
        }
       
        public void close() throws IOException {
                r.close();
        }
}
作者: 谭荣强    时间: 2014-3-17 02:11
public int read() throws IOException {
                if(len == pos){                                                        
                        len = r.read(arr);                                       
                        pos = 0;                                                        
                }
                return len == -1 ? -1 : arr[pos++];   
先看看read()方法这段代码的功能。实现了读取单个字符的功能。
        假定r的关联文件有7个元素 。
        第一次 read(),判断if(len == pos)满足,都是0。
        调用len = r.read(arr)(此时len=5),此时数组arr中存放5个元素,然后调用pos=0,将指针放在数组第一   个元素的位置。
        然后判断len==-1,不满足,因为len=5。返回arr[0]),先赋值,在++。pos++=1。第一个字符打印完
        如果在调用一次read(),判断if(len == pos)不满足,因为5不等于1。判断len==-1吗,不满足,因为len=5。
        返回arr[1],pos++=2。第二个字符打印完。
        ........
        ........
        当打印完第五个数组后,也就是数组全部打印完,len==pos=5;在读入流中剩下的字符......循环。
        所以pos的取值是0 1 2 3 4 5 ,取决于你的数组容量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2