En estos tiempos que corren, lo más habitual es que descarguemos archivos relativamente grandes: un video, un zip con el código fuente de esa librería que vamos a utilizar, un documento de ayuda, etc. Esta situación llevó hace unos años a generalizar el uso de gestores de descarga (o download managers en inglés) que nos permitían optimizar nuestra lenta conexión a internet (GetRight, Download Accelerator o FlashGet son algunos de los más conocidos).
La técnica para lograr esto es tan sencilla como efectiva: consiste en dividir nuestro archivo remoto en trozos (llamados formalmente segmentos), y descargar cada uno de esos trozos por separado, normalmente a través de un hilo de ejecución. Cada uno de estos trozos se puede ir guardando en un archivo, y al finalizar se fusionarán todos los segmentos en un único archivo, que contendrá los datos del recurso remoto.
Esto lo puede mejorar y refinar todo lo que queramos: utilizando un archivo único de destino donde vamos guardando los distintos segmentos, descargando cada segmento desde un proceso distinto y todo lo que se nos ocurra etc.
Para conseguir esto, podemos hacerlo de dos maneras: una fácil (y mala) y otra más elaborada (pero buena). Veamos pues: