1) Возможно, не так много данных доступно для чтения (другой конец канала еще не отправил столько данных), и реализующий класс может быть неблокирующим (то есть он просто вернет то, что может вместо ожидания достаточного количества данных для выполнения запроса).
Однако я не знаю, ведут ли себя какие-либо реализации таким образом, но интерфейс разработан для этого.
Другой вариант заключается в том, что файл закрывается на полпути через чтение.
2) Либо readFully () (который всегда будет ждать достаточного количества ввода, либо произойдет сбой), либо вызовите skipBytes () в цикле. Я думаю, что первое, вероятно, лучше, если массив не является действительно обширным.