У меня есть эта функция C ++, которая загружает файлы S3 как istreams , используя AWS SDK C ++:
std::istream& s3read(std::string bucket, std::string key) {
Aws::Client::ClientConfiguration aws_conf;
aws_conf.region = Aws::Environment::GetEnv("AWS_REGION");
aws_conf.caFile = "/etc/pki/tls/certs/ca-bundle.crt";
Aws::S3::S3Client s3_client(aws_conf);
Aws::S3::Model::GetObjectRequest object_request;
object_request.WithBucket(bucket.c_str()).WithKey(key.c_str());
auto get_object_outcome = s3_client.GetObject(object_request);
if (get_object_outcome.IsSuccess()) {
std::istream& res = get_object_outcome.GetResult().GetBody();
return res;
} else {
...
};
};
Я вызываю ее из main.cpp и пытаюсьчтобы разобрать его с Jsoncpp :
std::istream& stream = s3read(bucket, key);
Json::Value json;
Json::Reader reader;
reader.parse(stream, json);
Однако, я продолжаю получать ошибка сегментации .Почему?
Мне кажется, проблема в том, что reader.parse нужны двоичные данные, а istream - нет.Но, если я прав, как я могу проанализировать поток как двоичный?