Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 此循环将读取输入流多少次?_Java_Sockets_For Loop_Stream - Fatal编程技术网

Java 此循环将读取输入流多少次?

Java 此循环将读取输入流多少次?,java,sockets,for-loop,stream,Java,Sockets,For Loop,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

我有一段未注释的代码,我正试图理解。这些评论是我自己的

//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循环不会退出?

循环的重复次数是不确定的,因为
read()
可能在第一次运行时读取3个字节,然后终止-或者它可能一次读取1个字节,然后重复3次

然而,正如评论所说的那样,
read()
很可能在第一次迭代中读取3个字节,循环只有一次迭代。
在这种情况下,会发生以下情况:

  • 检查
    len<3
    -是否为
  • 向数组读取3个字节,并设置
    c=3
  • 检查是否
    c==-1
    -它不是
  • 结束循环:设置
    len=len+c=3
  • 检查是否
    len<3
    -不是:终止循环

  • 循环的重复次数不确定,因为
    read()
    可能在第一次运行时读取3个字节,然后终止,或者一次读取1个字节,然后重复3次

    然而,正如评论所说的那样,
    read()
    很可能在第一次迭代中读取3个字节,循环只有一次迭代。
    在这种情况下,会发生以下情况:

  • 检查
    len<3
    -是否为
  • 向数组读取3个字节,并设置
    c=3
  • 检查是否
    c==-1
    -它不是
  • 结束循环:设置
    len=len+c=3
  • 检查是否
    len<3
    -不是:终止循环

  • len
    怎么会变成-1?
    len
    怎么会变成-1?我的逻辑错误是没有意识到在循环的每次迭代后都会调用增量表达式。我假设它是在循环运行之前,但变量直到循环之后才改变。谢谢。我在逻辑上的错误是没有意识到在循环的每次迭代后都会调用增量表达式。我假设它是在循环运行之前,但变量直到循环之后才改变。非常感谢。