从流中读取时的标准习惯是检查EOF(-1):
while((bytesRead = inputStream.read(buffer)) != -1)
这似乎很标准 - 我检查了像Apache Commons这样的流行库的来源,它似乎是事实上的标准。
为什么我们也不停在0? > -1
会不会更好?当我们没有阅读任何内容时,为什么循环中有什么工作呢?
答案 0 :(得分:2)
基本上因为它毫无意义。看看documentation:
如果
b
的长度为零,则不读取任何字节,返回0;否则,尝试读取至少一个字节。如果没有字节可用,因为流位于文件的末尾,则返回值-1;否则,至少读取一个字节并存储到b
。
所以,除非你在一个空缓冲区中传递(在几乎所有情况下基本上都是一个bug;我个人希望该方法在这种情况下会引发异常)返回值永远不会为0 。它将阻止至少读取一个字节(在这种情况下返回值为1或更多),或者阻止到达流的末尾(在这种情况下返回值为-1)。