如何从uint8_t向量创建istream?

S. *_*sey 9 c++

我正在添加通过网络获取数据的能力,以便只读取本地文件的代码.我正在使用的网络库以a的形式发送和接收数据vector<uint8_t>.我希望能够在读取文件后重用处理数据的代码,但该代码需要std :: istream,有没有办法让istream读取矢量数据?这是相同的数据,所以我觉得应该有办法,但我无法找到或找出如何做的代码.

当前代码:

    std::ifstream stream("data.img", std::ios::in | std::ios::binary | std::ios::ate);

    if (!stream.is_open())
    {
        throw std::invalid_argument("Could not open file.");
    }
    // the arg for processData is std::istream
    processData(stream);
Run Code Online (Sandbox Code Playgroud)

网络框架:

    vector<uint8_t> data = networkMessage.data;

    // need some way to create istream from data
    std::istream stream = ?

    processData(stream);
    stream.close();
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,还是我咆哮错误的树?

use*_*042 -1

您可以通过将数据分配给 astd::string并使用std::istringstream与其绑定来实现此目的(不考虑unsigned chartosigned char转换问题):

std::string s((char*)networkMessage.data(),networkMessage.size());
std::istringstream iss(s);

std::istream& stream = iss;
         // ^ Note the reference here.

processData(stream);
stream.close();
Run Code Online (Sandbox Code Playgroud)