Это документированное поведение. Javadoc говорит, что getSize()
...
"Возвращает несжатый размер входных данных или -1, если неизвестно."
Очевидно, что это ситуация, когда фактический размер несжатых данных не известен.Ваша заявка будет только иметь дело с этим.
FOLLOWUP
Вы прокомментировали другой ответ:
Хотя мы имеемобщий размер контента, я думаю, без индивидуального размера файла мы не можем прочитать файлы.
Если у вас нет размера, вы все равно можете прочитать файл и поместить его в буфер, используя ByteArrayOutputStream
, затем вызовите toByteArray()
, чтобы извлечь буферизованные байты как byte[]
.На самом деле, учитывая, что (согласно комментарию Тома Хоутина) сообщенный размер может быть неправильным, вы, возможно, должны все равно сделать это, и просто воспринимать сообщаемый размер как подсказку ... и просто использовать его как *Начальная емкость 1030 *.
(Кстати, код в вашем вопросе выглядит так, как будто он должен был работать именно так ... судя по 2-ой и последней строке. Проблема в том, что остальныекод не использует объект baos
.)