У меня есть блок памяти (непрозрачный), который я хочу сохранить в BLOB-объекте в MySQL через адаптер C ++. Адаптер ожидает поток:
virtual void setBlob(unsigned int parameterIndex, std::istream * blob) = 0;
Итак, мой вопрос: как я могу создать std :: istream из этого блока памяти (напечатанного как char *). Это не строка, так как она не заканчивается нулем (но я знаю ее длину, конечно).
Я не мог найти способ сделать это без копирования моего блока памяти, например, в std :: string. Я думаю, что это немного расточительно. Что-то вроде этого не работает:
std::streambuf istringbuf(blockPtr, blockLength);
std::istringstream tmp_blob(&istringbuf);
потому что std :: streambuf не имеет такого конструктора. Я увидел следующее предложение.
std:: istringstream tmp_blob;
tmp_blob.rdbuf()->pubsetbuf(blockPtr, blockLength);
Это правильный путь?