In theory all you have to do is add a compressing stream between your application code and the SSLSocket.
However there are problems with using [G]ZipOutputStreams because of the necessity to call finish() when flushing, the problem being that this finishes the ZipOutputStream so you then have to start another one, which defeats its purpose really. Search these forums for an answer (if there is one).
You can greatly help the general transmission efficiency of SSL without compression by always using a BufferedOutputStream of at least 16k when writing to an SSLSocket. This can make an order-of-magnitude improvement in the wire efficiency if you write in small chunks.