background image

到 InputStream 末尾再继续读时。如果发生读取异常,可能出现这个问题,而这个循环没
有检查 readBytes 值是否为-

1

就往 totalRead 上加,这样再次进入循环体继续读取

InputStream,又返回-

1

,继续循环。如此循环直到

int

溢出才会跳出循环。而这个循环也就

成了实实在在的 CPU 杀手,可以占去大量的 CPU 时间(取决于操作系统)。其实解决很简
单,对 readBytes 进行判断,如果为-

1

则跳出循环。

  这个例子告诉我们:对循环一定要搞清循环的循环规模、每次循环体执行时间、循环
结束条件包括异常情况等,只有这样才能写出高效且没有隐患的代码。