Вы можете создать вспомогательный метод для полного заполнения буфера. Примерно так:
public int fillBufferCompletely(InputStream is, byte[] bytes) throws IOException {
int size = bytes.length;
int offset = 0;
while (offset < size) {
int read = is.read(bytes, offset, size - offset);
if (read == -1) {
if ( offset == 0 ) {
return -1;
} else {
return offset;
}
} else {
offset += read;
}
}
return size;
}
Тогда вам просто нужно передать в буфер размером x
.
Редактировать
Майкл опубликовал ссылку на функцию, которая делает то же самое. Единственное отличие от моего заключается в том, что он может возвращать меньше, чем длина буфера, но только при условии окончания потока. DataInputStream.readFully
выдаст исключение времени выполнения в этом сценарии.
Так что я оставлю свой ответ на случай, если пример такого поведения будет полезен.