У меня есть блок без комментариев, который я пытаюсь понять.Комментарии мои.
//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
, потому что вы пытаетесь сохранить прочитанный байт из потока в заголовок [-1].Таким образом, поскольку генерируется исключение, значение c останется равным 3 с первого запуска цикла.
Прав ли я, полагая, что поскольку исключение перехвачено, цикл for не завершается?