Ну, во-первых, вы сделали себе ложную дихотомию.Одно совершенно нормальное обстоятельство заключается в том, что буфер не будет заполнен, потому что в файле осталось не так много байтов.Это не IOException
, но это не означает, что содержимое всего файла не было прочитано.
В спецификации сказано, что метод либо возвратит -1, указывая конец потока, либо заблокирует дохотя бы один байт читается.Реализаторы InputStream
могут оптимизировать по своему усмотрению (например, поток TCP может возвращать данные, как только поступит пакет, независимо от выбора размера буфера вызывающей стороной).FileInputStream
может заполнить буфер данными из одного блока.Как вызывающий пользователь, вы понятия не имеете, за исключением того, что пока метод не вернет -1
, вам нужно продолжать читать.
Редактировать
На практике, на вашем примере, единственным обстоятельством, которое я хотел быПосмотрите, где буфер не будет заполнен (со стандартной реализацией), если размер файла изменился после того, как вы выделили буфер, но до того, как начали его читать.Поскольку вы не заблокировали файл, это возможно.