簡體   English   中英

此循環將讀取輸入流多少次?

[英]How many times will this loop read input stream?

我要嘗試了解一些未注釋的代碼。 評論是我自己的。

//create an array name header that holds 4 bytes
byte header[] = new byte[4];
int len = 0;
int c = -1;

for(; len != 3; len += c)// run loop till len = 3
{
  try
  {
    //first run of the loop following should be true
    //read 3 bytes and save into header array starting at 0
    // c = number of bytes read (most likely 3 after first run of loop)

    c = is.read(header, len, 3 - len);

  }
  catch(Exception e)
  {
     System.err.println("read header error " + e.getMessage());
     displayErrorMessage(e);
  }
  if(c == -1)
    return null;

}

這段代碼正在讀取輸入流,但是我不確定它將循環多少次。 我嘗試在紙上遍歷循環,每次都替換lenc並且經過7次迭代len仍然不等於3。

在循環的第二次運行期間,len應該等於-1,而c應該等於3。-1應該使read方法拋出IndexOutOfBoundsException因為您正試圖將從流讀取的字節保存到header [-1]。 因此,由於引發了異常,因此從循環的第一次運行起,c的值將保持等於3。

我是否可以假設既然捕獲了異常,for循環就不會退出?

循環將重復的次數是不確定的,因為read()可能在第一次運行時讀取3個字節,然后終止-或者一次讀取1個字節,並重復3次。

但是,正如評論所言read()很可能在第一次迭代中讀取3個字節,並且循環中只有一個迭代。
對於這種情況,將發生以下情況:

  1. 檢查len < 3
  2. 讀取3個字節到數組,並設置c = 3
  3. 檢查c == -1不是
  4. 結束循環:設置len = len + c = 3
  5. 檢查len < 3不是:終止循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM