簡體   English   中英

const char *到std :: basic_iostream

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM