【发布时间】:2012-03-15 16:10:15
【问题描述】:
我有一段未注释的代码正在尝试理解。 cmets是我自己的。
//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 循环不会退出?
【问题讨论】:
-
len怎么会变成-1?
标签: java sockets for-loop stream