我有一塊未註釋的代碼,我試圖理解。評論是我自己的。這個循環會多少次讀取輸入流?
//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應該使讀取方法拋出一個IndexOutOfBoundsException
,因爲您試圖將從流中讀取的字節保存到標頭[-1]。因此,由於引發了異常,從循環的第一次運行開始,c的值將保持等於3。
我是否正確地認爲自從異常被捕獲後,for循環不會退出?
len怎麼能最終成爲-1? – 2012-03-15 16:21:28