c ++ rdbuf() - >用于流的pubsetbuf,使用char缓冲区。我没有数据

时间:2011-11-16 12:52:07

标签: c++ stringstream

也许可以存在更好的解决方案,但这就是我所拥有的:

mybuffer   = new char[265536](); // all to zero 
the_stream = new stringstream ;
the_stream->rdbuf()->pubsetbuf(mybuffer,265536);

我有一个put函数:

template <class TTput_stream>
void W_inpout::W_stream::put (TTput_stream &value) {   
   int a =  sizeof value;
   const char * buffer ;
   buffer = reinterpret_cast<const char*> (&value);
   the_stream->write(buffer,sizeof value);
   loc+= sizeof value;
   if (lof<loc)  lof=loc; 
}

获取功能:

template <class TTget_stream>
void W_inpout::W_stream::get(TTget_stream & value) {
    char * buffer ;
    buffer = reinterpret_cast< char*> (&value);
    the_stream->read(buffer, sizeof value);  
    loc=int(the_stream->tellg());
    the_stream->seekp(the_stream->tellg());
}

它对我有用。 如果我放了一些值(例如一个int,2个浮点数,3个双精度数),我可以毫无问题地恢复它们(在调用get函数之前进行搜索)。

但我有一个问题。 我想访问'mybuffer'数据,我发现在一些'put'命令后,我在所有265536位置都保持零。

for (int x=0;x<265536;x++) { if (mybuffer[x]!=0) .... )

我不明白发生了什么。我的数据在哪里?为什么我的缓冲区似乎是空的?

1 个答案:

答案 0 :(得分:0)

我没有看到零。用gcc 4.5检查。如果您使用Visual Studio,则可以找到此链接有用:

Setting the internal buffer used by a standard stream (pubsetbuf)