我正在尝试创建一个istream
直接从原始内存缓冲区读取的内容。
我在这里的另一篇文章中找到了一个很好的方法:
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
然后我istream
使用这个创建我的membuf
:
membuf mb(dataPointer, dataLength);
istream reader(&mb);
然后我阅读了使用getline()
和>>
运算符,一切都很棒。但是,我似乎无法使用seekg()
回退到缓冲区的开头,并且istream::tellg()
总是返回-1
.
我是否需要编写更多代码才能使这些工作,或者这注定要失败?