Хорошо это или плохо, но я без проблем использовал следующий код:
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-архиве, она работает?
Любой вклад приветствуется
Спасибо