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爲止,或者有讀取內容。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息