Хорошо это или плохо, я без проблем использую код, подобный следующему:
ZipFile aZipFile = new ZipFile(fileName);
InputStream zipInput = aZipFile.getInputStream(name);
int theSize = zipInput.available();
byte[] content = new byte[theSize];
zipInput.read(content, 0, theSize);
Я использовал его (эта логика получения доступного размера и чтения непосредственно в байтовый буфер)
для File
I / O без проблем, и я использовал его также с zip-файлами.
Но недавно я обнаружил, что zipInput.read(content, 0, theSize);
на самом деле читает на 3 байта меньше, чем theSize
.
И поскольку код не находится в цикле для проверки длины, возвращаемой zipInput.read(content, 0, theSize);
Я прочитал файл с отсутствующими 3 последними байтами
и позже программа не может функционировать должным образом (файл является двоичным файлом).
Достаточно странно с разными zip-файлами большего размера, например 1075 байт (в моем случае проблемная запись zip составляет 867 байт), код работает отлично!
Я понимаю, что логика кода, вероятно, не самая "лучшая", но почему я вдруг получаю эту проблему сейчас?
А как получится, если я сразу запустлю программу с большей записью zip, она работает?
Любые пожелания приветствуются
Спасибо