in awsio/csrc/io/s3/s3_io.cpp [317:351]
void S3Init::s3_read(const std::string &file_url, std::string *result) {
std::string bucket, object;
parseS3Path(file_url, &bucket, &object);
S3FS s3handler(bucket, object, multi_part_download_,
initializeTransferManager(), initializeS3Client());
uint64_t offset = 0;
uint64_t result_size = 0;
uint64_t file_size = this->get_file_size(bucket, object);
std::size_t part_count = (std::max)(
static_cast<size_t>((file_size + buffer_size_ - 1) / buffer_size_),
static_cast<std::size_t>(1));
result->resize(file_size);
for (int i = 0; i < part_count; i++) {
offset = result_size;
size_t buf_len = std::min<size_t>(buffer_size_, file_size - result_size);
size_t read_len =
s3handler.read(offset, buf_len, (char *)(result->data()) + offset);
result_size += read_len;
if (result_size == file_size) {
break;
}
if (read_len != buf_len) {
std::cout << "Result size and buffer size did not match";
break;
}
}
}