[英]const char * to std::basic_iostream
我有一个指向const *char
缓冲区及其长度的指针,并且正在尝试使用一个接受以下类型的对象的API(在本例中为AWS S3 C ++上传请求 ):
std::basic_iostream <char, std::char_traits <char>>
是否有一种简单的标准C ++ 11方法将缓冲区转换为兼容的流,最好不实际复制内存?
感谢Igor的评论,这似乎可行:
func(const * char buffer, std::size_t buffersize)
{
auto sstream = std::make_shared<std::stringstream>();
sstream->write(buffer, buffersize);
...
uploadRequest.SetBody(sstream);
....
作为解决方案的一个显而易见的推论,您可以使用以下代码创建一个空的basic_iostream。 本示例创建一个0字节的伪目录S3密钥:
Aws::S3::Model::PutObjectRequest object_request;
// dirName ends in /.
object_request.WithBucket(bucketName).WithKey(dirName);
// Create an empty input stream to create the 0-byte directory file.
auto empty_sstream = std::make_shared<std::stringstream>();
object_request.SetBody(empty_sstream);
auto put_object_outcome = s3_client->PutObject(object_request);
如果你不想让你的数据的副本,并使用升压假设是一个选项,你可以使用basic_bufferstream从boost:
#include <boost/interprocess/streams/bufferstream.hpp>
char* buf = nullptr; // get your buffer
size_t length = 0;
auto input = Aws::MakeShared<boost::interprocess::basic_bufferstream<char>> (
"PutObjectInputStream",
buf,
length);
然后您的s3客户端可以使用它:
Aws::S3::Model::PutObjectRequest req;
req.WithBucket(bucket).WithKey(key);
req.SetBody(input);
s3.PutObject(req);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.