Tengo un bloque de memoria (opaco), que quiero almacenar en una Blob en mySQL a través de su adaptador C++. El adaptador espera una istream:inicializando un C++ std :: istringstream desde un buffer en la memoria?
virtual void setBlob(unsigned int parameterIndex, std::istream * blob) = 0;
Así que mi pregunta es: ¿Cómo puedo crear un std :: istream de este bloque de memoria (a máquina como char *). No es una cadena ya que no tiene terminación nula (pero sé su duración, por supuesto).
No pude encontrar una manera de hacerlo sin copiar mi bloque de memoria, por ejemplo, en std :: string. Creo que esto es un poco derrochador Algo como esto no funciona:
std::streambuf istringbuf(blockPtr, blockLength);
std::istringstream tmp_blob(&istringbuf);
porque std :: streambuf no tiene tal constructor. Vi la siguiente sugerencia.
std:: istringstream tmp_blob;
tmp_blob.rdbuf()->pubsetbuf(blockPtr, blockLength);
¿Es esa la forma correcta?
duplicado Posible de [Ajuste del tampón interno utilizado por una corriente estándar (pubsetbuf)] (http://stackoverflow.com/questions/1494182/setting-the-internal-buffer- used-by-a-standard-stream-pubsetbuf) –