A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 遗忘的青春年华 中级黑马   /  2014-3-16 22:58  /  939 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

1 个回复

倒序浏览
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 ,取决于你的数组容量。

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马