Можно ли открыть архив TrueZIP из потока?
Используя TrueZIP, есть ли способ открыть и изменить существующий файл ZIP из потока (он, конечно, может быть выведен с использованием другого потока)?
У меня есть код для изменения ZIP, который отлично работает, пока я работаю с существующим настоящим ZIP-файлом в файловой системе, но у меня есть требование, чтобы все временные файлы были зашифрованы при хранении на диске. В большей части нашего приложения это легко сделать (используя CipherOutputStream и CipherInputStream), но у меня есть одна функция, которая использует TrueZIP для обновления существующего ZIP-файла. Эта часть очевидно терпит неудачу, если файл зашифрован.
ZIP-файлы будут использоваться проприетарными приложениями, которые не поддерживают шифрование, поэтому использование шифрования, которое является частью спецификации ZIP, невозможно.
Причина, по которой мы используем TrueZIP, заключается в том, что нам нужна поддержка Zip64 (которая, как я знаю, включена в Java 7, но мы не можем сейчас переключиться).
1 ответ
Нет, файл архива должен храниться в доступной файловой системе, чтобы использовать его с TrueZIP. Но у вас есть ряд других вариантов:
TrueZIP использует экземпляры интерфейса IOPoolService для управления временными файлами. Вы можете предоставить свою собственную реализацию, которая шифрует все временные файлы или, может быть, просто хранит их в куче (если они маленькие). Взгляните на ФАЙЛ драйвера TrueZIP, чтобы увидеть эталонную реализацию.
Вы можете использовать ParanoidZipRaesDriver для использования зашифрованных файлов RAES ZIP. Этот драйвер гарантирует, что никакие незашифрованные временные файлы не используются, ограничивая число одновременных потоков для записи файла архива одним.
Вы можете использовать стандартные ZIP-драйверы с FsOutputOption.ENCRYPT для включения шифрования WinZip AES. Чтобы убедиться, что незашифрованные временные файлы не используются, вы можете переопределить метод ZipDriver.newOutputSocket, как это делает ParanoidZipRaesDriver.