public Download download(String bucket, String key,
                             File file, long timeoutMillis) {
        return download(new GetObjectRequest(bucket, key), file,
                timeoutMillis);
    }
Schedules a new transfer to download data from Amazon S3 and save it to
the specified file. This method is non-blocking and returns immediately
(i.e. before the data has been fully downloaded).
<p>
Use the returned Download object to query the progress of the transfer,
add listeners for progress events, and wait for the download to complete.
</p>
<p>
If you are downloading <a href="http://aws.amazon.com/kms/">Amazon Web Services
KMS</a>-encrypted objects, you need to specify the correct region of the
bucket on your client and configure Amazon Web Services Signature Version 4 for added
security. For more information on how to do this, see
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#
specify-signature-version
</p>

@param bucket
           The name of the bucket containing the object to download.
@param key
           The key under which the object to download is stored.
@param file
           The file to download the object's data to.
@param timeoutMillis
           Timeout, in milliseconds, for waiting for this download to
           complete.  Note that the timeout time will be approximate
           and is not strictly guaranteed.  As a result this timeout
           should not be relied on in cases where exact precision is
           required.

@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