バイトunsigned char *buffer
で満たされたバッファがあります。size
そこからストリームを開始したい。
バッファバイトをコピーする次のようにできます:
string s(bytes, bytes + size);
stringstream ss(s);
そのコピーなしでストリームを初期化できるのだろうか?
カスタムを実装してから、コンストラクターstreambuf
に渡す必要があります。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;
}