黑马程序员技术交流社区
标题:
模拟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