在读取流时,为什么不在0字节读取时停止迭代

时间:2017-05-04 14:29:23

标签: java

从流中读取时的标准习惯是检查EOF(-1):

while((bytesRead = inputStream.read(buffer)) != -1)

这似乎很标准 - 我检查了像Apache Commons这样的流行库的来源,它似乎是事实上的标准。

为什么我们也不停在0? > -1会不会更好?当我们没有阅读任何内容时,为什么循环中有什么工作呢?

1 个答案:

答案 0 :(得分:2)

基本上因为它毫无意义。看看documentation

  

如果b的长度为零,则不读取任何字节,返回0;否则,尝试读取至少一个字节。如果没有字节可用,因为流位于文件的末尾,则返回值-1;否则,至少读取一个字节并存储到b

所以,除非你在一个空缓冲区中传递(在几乎所有情况下基本上都是一个bug;我个人希望该方法在这种情况下会引发异常)返回值永远不会为0 。它将阻止至少读取一个字节(在这种情况下返回值为1或更多),或者阻止到达流的末尾(在这种情况下返回值为-1)。