实现istream获取字符缓冲区?

时间:2009-03-01 20:19:26

标签: c++ stream

我想实现以下有一个字符缓冲区和我试图移植的代码将这个字符缓冲区放在一个流中,然后做一个像这样的

 char *buffer; //this is initialized
 int bufferSize;  //this is initlized
 std::istringstream inputStream (std::string(buffer, bufferSize));
 int getVal = inputStream.get();

编辑:上面的代码是否是最优的,其中对于getVal,您将整个缓冲区复制到流中,然后对流进行获取。

如何从缓冲区本身获取getVal值。

1 个答案:

答案 0 :(得分:1)

我不相信它是最优的,因为构造一个std :: string可能会导致整个缓冲区的副本。然而,istringstream用法看起来很好。

要直接从缓冲区获取,您可以执行以下操作:

int bufferPos = 0;

char getFromBuffer ()
{
  if (bufferPos < bufferSize)
  {
    return buffer[bufferPos++];
  }
  else
  {
    return 0;
  }
}

但是,您可能希望在此处添加更好的界面。可能有更好的方法来构造带有char *的istringstream,但是在快速浏览文档时我没有看到它。