Comprimir cierto tipo de archivos como los archivos de texto puede suponer un considerable reducción del tamaño del archivo original, un xml del 20 MiB se puede quedar en 1.5 MiB, es decir, una tasa de compresión de 13 o lo que es lo mismo el fichero comprimido ocupa 13 veces menos. Esto es muy interesante en las aplicaciones web ya que puede ayudar a ahorrar ancho de banda y reducir los tiempos de descarga del archivo. La compresión se hace a costa de cargar la CPU con trabajo pero normalmente el tiempo global que se tarda en descargar el archivo suele ser menor comprimiendo ya que el mayor limitante suele ser el ancho de banda de la red y no la carga de la CPU. Otra ventaja para las aplicaciones web es que algunos formatos además de comprimir pueden contener varios archivos y por tanto haciendo uso de ellos se pueden devolver un archivo pero que contiene a varios en una sola petición.
Java proporciona una
serie de clases para trabajar con archivos comprimidos en formato zip y su uso no es muy complicado. Aquí el código para generar un archivo zip con la Api de Java y guardando en él dos archivos.
También hay disponibles librerías en Java para trabajar con otros algoritmos de compresión aparte del zip, como
gzip,
LZMA o
XZ que producen
archivos más pequeños y con mayor ratio de compresión aunque no de forma más rápida.
Referencia:
http://java.sun.com/developer/technicalArticles/Programming/compression/
http://www.7-zip.org/
http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Markov_chain_algorithm