当前位置: 移动技术网 > IT编程>开发语言>Java > Java-Readable

Java-Readable

2019年12月01日  | 移动技术网IT编程  | 我要评论

童心撞地球之长发公主,202.114.74.198,修神成魔

 1 import java.nio.*;
 2 import java.util.*;
 3 import static net.mindview.util.print.*;
 4  
 5 public class randomwords implements readable {
 6   private int readcount = 1;//read()执行次数
 7   private int loopcount = 1;
 8   public randomwords() {  }    
 9   public int read(charbuffer cb) {
10  
11       if (loopcount == 1){print("进入read执行第" + readcount + "次");readcount++;cb.append("aa bb cc ");loopcount++;return 1;}//仅仅在第一次和第六次给charbuffer添加3个数据
12       if (loopcount == 2){print("进入read执行第" + readcount + "次");readcount++;loopcount++;return 1;}//其他的时候返回1,但是并不往buffer中存放数据,来骗被调用者hasnext(),来观察出现了什么现象
13       if (loopcount == 3){print("进入read执行第" + readcount + "次");readcount++;loopcount++;return 1;}
14       if (loopcount == 4){print("进入read执行第" + readcount + "次");readcount++;loopcount++;return 1;}
15       if (loopcount == 5){print("进入read执行第" + readcount + "次");readcount++;loopcount++;return 1;}
16       
17       if (loopcount == 6){print("进入read执行第" + readcount + "次");readcount++;cb.append("oo pp qq ");loopcount++;return 1;}
18       if (loopcount == 7){print("进入read执行第" + readcount + "次");readcount++;loopcount++;return 1;}
19       if (loopcount == 8){print("进入read执行第" + readcount + "次");readcount++;loopcount++;return 1;}
20       if (loopcount == 9){print("进入read执行第" + readcount + "次");readcount++;loopcount++;return 1;}
21       if (loopcount == 10){print("进入read执行第" + readcount + "次");readcount++;return -1;}
22       return 1;      
23   }
24  
25   public static void main(string[] args) {
26       int a = 1;//外层循环的次数
27  
28       print("1");
29       scanner s = new scanner(new randomwords())
30       print("2");
31       
32       
33       while(s.hasnext()){//这个hasnext()方法会调用read()方法的
34           print("第" + a + "次执行外层循环");
35           a ++;
36           system.out.println("从cb中读出 " + s.next());
37       }
38   }
39 }
上面的执行结果是:
1
2
进入read执行第1次
第1次执行外层循环
从cb中读出 aa
第2次执行外层循环
从cb中读出 bb
第3次执行外层循环
从cb中读出 cc
进入read执行第2次
进入read执行第3次
进入read执行第4次
进入read执行第5次
进入read执行第6次
第4次执行外层循环
从cb中读出 oo
第5次执行外层循环
从cb中读出 pp
第6次执行外层循环
从cb中读出 qq
进入read执行第7次
进入read执行第8次
进入read执行第9次
进入read执行第10次
  可以看到,在执行到while(s.hasnext())时,要判断是否输入了内容,此时要进行读取操作,调用read()函数,执行 loopcount == 1 得到了返回值为1,因此程序判断有输入内容,同时 cb.append("aa bb cc ")已经执行,由于s.hasnext()是以空格为间断符
第一次只能读aa,后面的在cd外排序等待,读完之后执行print(),然后由于一次性给过来的是aa bb cc。因此接着读取bb。最后cc。
继续执行 loopcount == 2 此时返回值仍为1,但是s.hasnext()并未检测到有具体内容要读取进来,因此继续调用read()函数,直到s.hasnext()检测到返回值为-1为止,或者有读取内容。
 
 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网