public Download resumeDownload(PersistableDownload persistableDownload) {
        assertParameterNotNull(persistableDownload,
                "PausedDownload is mandatory to resume a download.");
        assertNotObjectLambdaArn(persistableDownload.getBucketName(), "resumeDownload");

        GetObjectRequest request = new GetObjectRequest(
                persistableDownload.getBucketName(), persistableDownload.getKey(),
                persistableDownload.getVersionId());
        if (persistableDownload.getRange() != null
                && persistableDownload.getRange().length == 2) {
            long[] range = persistableDownload.getRange();
            request.setRange(range[0], range[1]);
        }
        request.setRequesterPays(persistableDownload.isRequesterPays());
        request.setResponseHeaders(persistableDownload.getResponseHeaders());

        return doDownload(request, new File(persistableDownload.getFile()), null, null,
                APPEND_MODE, 0,
                persistableDownload);
    }
Resumes an download operation. This download operation uses the same
configuration as the original download. Any data already fetched will be
skipped, and only the remaining data is retrieved from Amazon S3.

@param persistableDownload
           the download to resume.
@return A new <code>Download</code> object to use to check the state of
        the download, listen for progress notifications, and otherwise
        manage the download.

@throws AmazonClientException
            If any errors are encountered in the client while making the
            request or handling the response.
@throws AmazonServiceException
            If any errors occurred in Amazon S3 while processing the
            request.
aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java