gpt4 book ai didi

c++ - 我如何从 uint8_t vector 创建一个 istream?

转载 作者:可可西里 更新时间:2023-11-01 16:48:27 30 4
gpt4 key购买 nike

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

当前代码:

    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);

网络框架:

    vector<uint8_t> data = networkMessage.data;

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

processData(stream);
stream.close();

有没有办法做到这一点,还是我找错了树?

最佳答案

std::basic_istream 从关联的 std::basic_streambuf 派生类获取数据。 STL 为文件 I/O 和字符串 I/O 提供了此类,但不为内存 I/O 或网络 I/O 提供此类。

您可以轻松编写(或找到第 3 方)基于内存的 streambuf 类,该类使用 std::vector 作为其底层缓冲区,然后您可以构造使用该内存 streambufstd::istream。例如(使用 imemstreamthis answer ):

std::vector<uint8_t> &data = networkMessage.data;
imemstream stream(reinterpret_cast<const char*>(data.data()), data.size());
processData(stream);

关于c++ - 我如何从 uint8_t vector 创建一个 istream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45722747/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com