java readable_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为止,或者有读取内容。

标签:readCount,Java,loopCount,read,Readable,++,print,执行

来源: https://www.cnblogs.com/Qiav/p/11965815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值