What are the practical differences, in terms of performance and functionality, between ZipInputStream/ZipOutputStream and GZIPInputStream/GZIPOutputStream?
tarutility before, then compressing the stream in a "tar.gz" file (tarball).
If you have to compress a single file, it's better to use GZIP I/O classes, because there isn't multi-file archive handling and shall be faster than ZIP I/O classes. Vice versa, if you have to create an archive of more than 1 file, it's better to use ZIP I/O classes.
For more info, see the zLib homepage.