
Иногда требуется скачивать файл порциями. Причины бывают разные, например слишком “большой” объем файла, ширина канала не достаточна или сервер ограничивает объем данных для скачивания.
В этой статье опишу каким образом реализовать скачивание файла небольшими порциями на языке Java по протоколу HTTP.
HTTP
Для таких целей HTTP предоставляет заголовок
Range
для запроса. В котором указывается диапазон байтов для скачивания. Заголовок Range
относится только к телу запроса, заголовки сюда не входят.Спецификация определяет следующие форматы указания значений заголовка:
Range: bytes=first-byte-pos "-" [last-byte-pos]
first-byte-pos — начальное смещение байта с которого необходимо начать (продолжить) скачивание, оно должно быть больше либо равно 0, и меньше либо равно last-byte-pos;
last-byte-pos — конечное смещение байта до которого необходимо скачать файл, оно должно быть больше либо равно first-byte-pos и при этом меньше либо равно скачиваемому размеру файла минус один (потому что это смещение, то есть индекс в массиве байтов).