На первый взгляд, эти два условия могут показаться очень разными.Давайте переставим их так, чтобы (len = in.read(b))
всегда было слева:
(len = in.read(b)) != -1
(len = in.read(b)) > 0
Выражение (len = in.read(b))
оценивается как in.read(b)
.Таким образом, единственное различие между этими двумя условиями заключается в том, что первый проверяет, не возвращает ли read
-1, а второй проверяет, возвращает ли read
значение, большее 0.
Давайте рассмотрим что read
может вернуть :
Возвращает:
общее количество байтов, считанных в буфер, или -1, если естьбольше нет данных, потому что достигнут конец потока.
Это означает, что read
не возвращает ничего меньше -1, что, в свою очередь, означает, что два рассматриваемых условия будут оценивать толькок другим значениям, если read
возвращает 0. Но посмотрите, read
возвращает 0, только когда байт не читается, и единственный раз, когда байт не читается, это когда вы передаете массив длиной 0:
Если длина b равна нулю, то байты не читаются и возвращается 0;в противном случае предпринимается попытка прочитать хотя бы один байт.Если байт недоступен, поскольку поток находится в конце файла, возвращается значение -1;в противном случае, по крайней мере один байт считывается и сохраняется в b.
Ваш массив имеет постоянную длину 1024
, поэтому в данном конкретном случае два условия приведут к одинаковым результатам.