Когда вы вызываете out.close (), он также закрывает основной поток / канал.
Если вы сначала закроете базовый канал, буферизованные данные или нижний колонтитул не будут записаны.
Формат GZIP содержит CRC32, который должен быть в конце и не может быть записан до тех пор, пока вы не закроете поток, и я ожидаю, что он отсутствует, поэтому содержимое файла не может быть проверено. Самое простое решение - не закрывать основной канал самостоятельно.
Кстати: как правило, лучше всего закрывать ресурсы в обратном порядке их создания. ;)