Java-Readable
2019-12-01 11:24:00来源:博客园 阅读 ()
Java-Readable
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为止,或者有读取内容。
原文链接:https://www.cnblogs.com/Qiav/p/11965815.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 腾讯IM 2020-06-07
- 通俗理解spring源码(六)—— 默认标签(import、alias、be 2020-06-07
- Spring中@Import的三种情况 2020-05-26
- 【报错】导入项目后报错:Target runtime Apache Tomcat v7. 2020-05-25
- 第六章第三十三题(当前日期和时间)(Current date and time 2020-05-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash