2011-01-05 5 views
3

Есть ли способ изменить zip на андроид без необходимости извлекать его содержимое? Мне нужно только добавить/удалить около 10 файлов. Если бы мне пришлось извлечь почтовый индекс, он мог бы подняться до 200 мб.Android Изменить Zip FIle

+0

+1, интересный вопрос; Я подозреваю, что андроид использует некоторые стандартные java-библиотеки для изменения сжатых файлов, поэтому вы можете искать их на этом сайте. – jcollum

+0

@jcollum: У меня пока нет кода, но я жду, хочу ли мне использовать сторонний код или 'java.util.zip'. – nebkat

+0

java.util.zip не дает вам то, что вам нужно. Из собственного кода вы можете использовать что-то вроде build/tools/zipalign/ZipFile.cpp, которое может удалять записи и добавлять сжатые данные без повторного сжатия (например, добавление gzipped-файла в zip-архив), но это не является частью публичного API, поэтому Я не могу это порекомендовать. – fadden

ответ

0

Я не думаю, что вы собираетесь найти простой способ сделать это с помощью встроенного в библиотеках. Если это ключевая функция вашего приложения, вы можете написать свой собственный (разбор zip не так уж и трудный).

Вот общий подход: начните чтение zip, определите первый заголовок записи zip - когда вы найдете заголовок для записи, которую хотите исключить, просто продолжайте читать следующую запись - иначе выпишите. Следите за выходным смещением каждого zipentry. Затем напишите свой собственный почтовый трейлер в конце файла.

Формат zip четко определен (и не особенно сложный - особенно b/c вам не придется гадать с вентилятором или дефлятом или шифрованием или что-то в этом роде), и то, что вы пытаетесь сделать, просто: http://www.pkware.com/documents/casestudies/APPNOTE.TXT

С другой стороны, если это не основной функциональностью вашего приложения, найдите и лицензируйте библиотеку, которая может это сделать (я сомневаюсь, что вы найдете реализации с открытым исходным кодом, которые делают) и перейдите на ,