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

java readable_Java-Readable相关推荐

  1. java 类加载过程

    1. 使用命令行查看类加载过程,在eclipse测试类的run configuration中配置-verbose:class或者-verbose,如下图所示: 运行结果如下所示: [Opened D: ...

  2. java加载并运行虚拟机_《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?...

    Java虚拟机是如何加载Java类的?  这个问题也就是面试常问到的Java类加载机制.在年初面试百战之后,菜鸟喜鹊也是能把这流程倒背如流啊!但是,也只是字面上的背诵,根本就是像上学时背书考试一样. ...

  3. 【Java】浅谈JavaDoc文档注释

    JavaDoc文档注释 文档注释 JavaDoc标记 文档注释示例 基于Eclipse IDE的JavaDoc实战 后记 文档注释 我们知道,Java有三种注释: 单行注释:// 多行注释:/* */ ...

  4. 读书笔记--Java核心技术--高级特征

    第一章--流与文件---------------------------------------------- 流 读写字节 java.io.InputStream 1.0 abstractint r ...

  5. JAVA高级---(2)15分钟入门JVM底层原理

    建议阅读时长 15min 文章中知识点,有部分来源自java官网以及比较优秀的博主,以及深入理解java虚拟机的书和java虚拟机规范,在此表示感谢,对于其文章中不明确的知识点进行深入的分析和编写. ...

  6. Fastjson 1.2.68版本反序列化漏洞分析篇

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | ale_wong@云影实验室 来源 | htt ...

  7. JVM -verbose参数详解(转)

    转自:http://www.javaranger.com/archives/367 java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息. 1.java -verb ...

  8. jvm对类的加载、链接、初始化

    package com.jmdf.redis.project;/*** 对于静态字段,只有直接定义了该字段的类才会被初始化* 当一个子类初始化时要求其全部父类已经初始化完毕.* -XX:+TraceC ...

  9. Javaweb安全——Fastjson反序列化利用

    Fastjson前置知识 反序列化函数 Object obj = JSON.parse(); //解析为JSONObject类型或者JSONArray类型 Object obj = JSON.pars ...

  10. 渗透测试-Fastjson各版本漏洞分析(下)

    - fastjson 1.2.45 - 1.2.44中对[进行了判断,我们用1.2.43的POC,然后下个JSONException的异常断点,看看是怎么判断的 运行后,在com.alibaba.fa ...

最新文章

  1. mysql中文乱码的一点理解
  2. 利用php实现删除,利用PHP实现删除目录及目录下所有文件 源代码
  3. 写在创业的路上:如何从无到有的打造一个产品
  4. Uva11729 Commando War
  5. SQL Server:统计数据库中每张表的大小
  6. [转]基于overlayfs的硬盘资源隔离工具troot
  7. [导入]流氓软件案落定 “很棒小秘书”终审败诉
  8. emply() php,thinkphp3.2.3 分页代码分享
  9. AI CycleGAN
  10. Lotus notes 通讯录的导入导出
  11. camvid数据集使用方法_github资源推荐:目标姿态检测数据集与渲染方法
  12. 华为HG255d WEB刷OpenWrt
  13. 一:Proficloud - EMMA能源管理+EMpro智能电表
  14. rtt segger 低功耗模式_Segger RTT使用注意事项
  15. 计算机大类专业学习c语言之重要性
  16. 02-Ceph 集群部署
  17. 手机虚拟摄像头_用手机当摄像头开直播 无他相机推荐
  18. 一个球绳命最后的高度哈哈
  19. 〔王鹰教程五〕和弦的分类记忆法
  20. 湖北二本大学计算机排名,2017年二本大学排名及分数线(湖北省)

热门文章

  1. 1124 Raffle for Weibo Followers(map)
  2. 工业农业消防自动检测及报警云方案
  3. ps扁平图之 油画(莫奈)中的色彩与几何
  4. 开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌客户端分析笔记
  5. 从战略到执行:业务领先模型 BLM 战略篇「战略意图」
  6. 对于Android11无法访问Android/data的解决方案 还在为你的大姐姐找不到而担心吗?还在为你的学习资料找不到而发愁吗?2021-03-11
  7. Flume使用Spooling Directory Source采集文件夹数据到hdfs
  8. 怎样快速将PDF文件旋转
  9. 提取OTU表格中分类学名称
  10. 【2011集训队出题】跳跳棋