public PartResult call()

in src/main/java/com/aliyun/oss/internal/OSSDownloadOperation.java [606:681]


        public PartResult call() throws Exception {
            PartResult tr = null;
            RandomAccessFile output = null;
            InputStream content = null;

            try {
                DownloadPart downloadPart = downloadCheckPoint.downloadParts.get(partIndex);
                tr = new PartResult(partIndex + 1, downloadPart.start, downloadPart.end);

                output = new RandomAccessFile(downloadFileRequest.getTempDownloadFile(), "rw");
                output.seek(downloadPart.fileStart);

                GetObjectRequest getObjectRequest = new GetObjectRequest(downloadFileRequest.getBucketName(),
                        downloadFileRequest.getKey());
                getObjectRequest.setMatchingETagConstraints(downloadFileRequest.getMatchingETagConstraints());
                getObjectRequest.setNonmatchingETagConstraints(downloadFileRequest.getNonmatchingETagConstraints());
                getObjectRequest.setModifiedSinceConstraint(downloadFileRequest.getModifiedSinceConstraint());
                getObjectRequest.setUnmodifiedSinceConstraint(downloadFileRequest.getUnmodifiedSinceConstraint());
                getObjectRequest.setResponseHeaders(downloadFileRequest.getResponseHeaders());
                getObjectRequest.setRange(downloadPart.start, downloadPart.end);
 
                String versionId = downloadFileRequest.getVersionId();
                if (versionId != null) {
                    getObjectRequest.setVersionId(versionId);
                }

                Payer payer = downloadFileRequest.getRequestPayer();
                if (payer != null) {
                    getObjectRequest.setRequestPayer(payer);
                }

                int limit = downloadFileRequest.getTrafficLimit();
                if (limit > 0) {
                    getObjectRequest.setTrafficLimit(limit);
                }

                OSSObject ossObj = getObjectWrap(getObjectRequest);
                objectMetadata = ossObj.getObjectMetadata();
                content = ossObj.getObjectContent();

                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                int bytesRead = 0;
                while ((bytesRead = IOUtils.readNBytes(content, buffer, 0, buffer.length)) > 0) {
                    output.write(buffer, 0, bytesRead);
                }

                if (objectOperation.getInnerClient().getClientConfiguration().isCrcCheckEnabled()) {
                    Long clientCRC = getInputStreamCRCWrap(content);
                    tr.setClientCRC(clientCRC);
                    tr.setServerCRC(objectMetadata.getServerCRC());
                    tr.setLength(objectMetadata.getContentLength());
                    downloadPart.length = objectMetadata.getContentLength();
                    downloadPart.crc = clientCRC;
                }
                downloadCheckPoint.update(partIndex, true);
                if (downloadFileRequest.isEnableCheckpoint()) {
                    downloadCheckPoint.dump(downloadFileRequest.getCheckpointFile());
                }
                ProgressPublisher.publishResponseBytesTransferred(progressListener,
                        (downloadPart.end - downloadPart.start + 1));
            } catch (Exception e) {
                tr.setFailed(true);
                tr.setException(e);
                logException(String.format("Task %d:%s upload part %d failed: ", id, name, partIndex), e);
            } finally {
                if (output != null) {
                    output.close();
                }

                if (content != null) {
                    content.close();
                }
            }

            return tr;
        }