Java: чтение из InputStream не всегда читает один и тот же объем данных

Хорошо это или плохо, но я без проблем использовал следующий код:

ZipFile aZipFile = new ZipFile(fileName);   
InputStream zipInput = aZipFile.getInputStream(name);  
int theSize = zipInput.available();  
byte[] content = new byte[theSize];  
zipInput.read(content, 0, theSize);

Я использовал его (эта логика получения доступного размера и чтения непосредственно в байтовый буфер) {{ 1}} для ввода-вывода файла без каких-либо проблем, и я также использовал его с zip-файлами.

Но недавно я столкнулся с ситуацией, когда zipInput.read (content, 0, theSize); фактически читает на 3 байта меньше, чем доступный theSize .

И поскольку код не входит в цикл для проверки длины, возвращаемой zipInput.read (content, 0, theSize); Я прочитал файл, в котором отсутствуют 3 последних байта
{{ 1}}, а затем программа не может работать должным образом (файл является двоичным файлом).

Достаточно странно с разными zip-файлами большего размера, например 1075 байт (в моем случае проблемная запись в почтовом индексе составляет 867 байт) код работает нормально!

Я понимаю, что логика кода, вероятно, не «лучшая», но почему у меня сейчас внезапно возникает эта проблема?

И почему, если я запускаю программу сразу с большей записью в zip-архиве, она работает?

Любой вклад приветствуется

Спасибо

5
задан Cratylus 17 January 2012 в 20:06
поделиться