Я заметил, что создание файла .zip с использованием библиотеки java.util.zip не записывает размер должным образом, и из-за этого
zipEntry.getSize; //created with a ZipInputStream (zipEntry = zis.getNextEntry())
zipEntry.getCompressedSize();
оба всегда возвращают -1.
Этого не произойдет, если я создам zipEntry с ZipFile и Enumeration, чего я не могу сделать в данном конкретном случае.
Как заставить библиотеку правильно записывать размеры?




Я пробовал следующий код, и возвращенные размеры были хорошими.
ZipInputStream zis = new ZipInputStream(new FileInputStream(new File("/tmp/foo.zip")));
ZipEntry entry = zis.getNextEntry();
System.out.println(entry.getSize());
System.out.println(entry.getCompressedSize());
zis.close();
Я думаю, что проблема не в том, как вы вызываете библиотеку, а в вашем zip-файле.
Это проблема только в том случае, если zip-файл был создан библиотекой, если вы заархивируете все, например, WinRar, все нормально. Я тестировал его с несколькими файлами, половина из них была создана с использованием библиотеки, а другая половина - с помощью WinRar. Если я разархивирую что-то, что было заархивировано библиотекой, а затем снова заархивирую полученные файлы с помощью WinRar, он вернет правильный размер. Более того, я не использую
File, потому что я работаю с "Storage Volume" (Android), что также является причиной, по которой я вообще не могу использоватьZipFile(илиFileиFileInputStream).