1

我有一个unsigned char *buffer充满size字节的缓冲区。我想从中初始化一个流。

我可以这样做,它复制缓冲区字节:

string s(bytes, bytes + size);
stringstream ss(s);

我想知道我是否可以在没有该副本的情况下启动流?

4

1 回答 1

3

您需要实现一个自定义streambuf,然后将其传递给istream构造函数。这将允许您像访问任何其他流一样访问数组数据。有关详细信息,请参阅以下链接:

  1. std::streambuf
  2. 标准::istream

Boost 提供了 iostreams 库来帮助解决这个问题。特别是,它已经提供了array_source用于包装标准数组的类。以下代码示例说明了如何完成此操作:

#include <cstdlib>
#include <iostream>
#include <string>

#include <boost/iostreams/stream_buffer.hpp>
#include <boost/iostreams/device/array.hpp>


namespace io = boost::iostreams;

int main(int argc, char* argv[]) {
    const char buffer[] = "buffer data\n";

    io::array_source src{ buffer, strlen(buffer) };
    io::stream_buffer<io::array_source> strbuf{ src };

    std::istream stream{ &strbuf };
    std::string line;
    std::getline(stream, line);
    std::cout << line << std::endl;
    return EXIT_SUCCESS;
}
于 2013-03-10T13:08:46.560 回答