Ну, если вы читаете Javadoc, он довольно четко гласит:
Возвращает количество байтов, которые могут
быть прочитанным из этого входного потока
без блокировки (выделено мной)
Так что совершенно ясно, что вы хотите не то, что предлагает этот метод. Таким образом, в зависимости от лежащего в основе InputStream у вас могут возникнуть проблемы гораздо раньше (например, поток по сети с сервером, который не возвращает размер файла - вам придется прочитать весь файл и поместить его в буфер, чтобы вернуть «правильное» доступное () считать, что заняло бы много времени - что если вы хотите только прочитать заголовок?)
Таким образом, правильный способ справиться с этим - изменить метод анализа, чтобы иметь возможность обрабатывать файл по частям. Лично я не вижу особой причины даже использовать функцию available () - просто вызов read () и остановка, как только read () вернет -1, должны работать нормально. Может быть усложнено, если вы хотите убедиться, что каждый файл действительно содержит байт blockSize - просто добавьте внутренний цикл, если этот сценарий важен.
int blockSize = XXX;
byte[] buffer = new byte[blockSize];
int i = 0;
int read = in.read(buffer);
while(read != -1) {
out[i++].write(buffer, 0, read);
read = in.read(buffer);
}