[英]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;
}
這段代碼正在讀取輸入流,但是我不確定它將循環多少次。 我嘗試在紙上遍歷循環,每次都替換len
和c
並且經過7次迭代len仍然不等於3。
在循環的第二次運行期間,len應該等於-1,而c應該等於3。-1應該使read方法拋出IndexOutOfBoundsException
因為您正試圖將從流讀取的字節保存到header [-1]。 因此,由於引發了異常,因此從循環的第一次運行起,c的值將保持等於3。
我是否可以假設既然捕獲了異常,for循環就不會退出?
循環將重復的次數是不確定的,因為read()
可能在第一次運行時讀取3個字節,然后終止-或者一次讀取1個字節,並重復3次。
但是,正如評論所言read()
很可能在第一次迭代中讀取3個字節,並且循環中只有一個迭代。
對於這種情況,將發生以下情況:
len < 3
是 c = 3
c == -1
不是 len = len + c = 3
len < 3
不是:終止循環
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.