Java поддерживает формат gzip
с GZipInputStream
(распаковка) и GZipOutputStream
(сжатие).И zip
, и gzip
используют один и тот же формат сжатия внутри, основное различие заключается в метаданных: у zip
он есть в конце файла, gzip
в начале (и gzip
поддерживает только один вложенный файл).файл легко).
Для потоковой передачи одного большого файла лучше использовать gzip
, даже больше, поскольку вам не нужен доступ к метаданным.
IЯ не уверен, что HTTPConnection отправляет Accept-Encoding: gzip
, а затем обрабатывает раздувание контента автоматически, если сервер доставляет его с Content-Encoding: gzip
, но вы, безусловно, можете сделать это вручную, если сервер просто отправляет файл .gz
как таковой (т.е.с Content-Encoding: identity
).
(Кстати, обязательно читайте из потока с не слишком маленькими буферами, поскольку каждый вызов deflate будет иметь собственные издержки вызова, так как GZipInputStream Java использует собственный zlib реализация.)