Мне немного неясно, вы пишете Java-клиент, который будет общаться с сервером (возможно, сервлетом Java?), Поэтому вы контролируете обе стороны передачи данных? Если это так, вы можете делать почти все, что вы хотите. В Java есть java.util.zip, в котором есть функции для сжатия.
Если вы хотите загрузить четыре (или N) файла одновременно, просто запустите N потоков и параллельно отправляйте HTTP-запросы на сервер. Это может на самом деле не улучшать вещи, в зависимости от скорости соединения, загруженности сети и т. Д.
Написание собственного клиента и обеспечение его правильной многопоточной безопасности - большая работа, поэтому люди просто используют клиентский код Apache HTTP. Его твердое тело.