也许可以存在更好的解决方案,但这就是我所拥有的:
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) .... )
我不明白发生了什么。我的数据在哪里?为什么我的缓冲区似乎是空的?
答案 0 :(得分:0)
我没有看到零。用gcc 4.5检查。如果您使用Visual Studio,则可以找到此链接有用:
Setting the internal buffer used by a standard stream (pubsetbuf)